/ / Laravel / Елоквент - Запитване - Изберете с връзка - php, mysql, ларавел, релационна база данни, красноречив

Laravel / Елоквент - Запитване - Изберете с връзка - php, mysql, ларавел, релационна база данни, красноречив

Модели

class Model1 extends Eloquent {
public function model2() {
return $this->hasOne("Model2");
}
}

class Model2 extends Eloquent {
public function model1() {
return $this->belongsTo("Model1");
}
}

Искам заявка

Искам да получа всички случаи от Model1 които правят не има Model2, С други думи, това не се споменава Model1 id в Model2 колона в таблицата model1_id.

Това може да се постигне с a foreach цикъл, итерация на всички Model1 и проверка дали model2 атрибута е нула, Но искам да го направя с красноречиви запитвания.

Отговори:

6 за отговор № 1

Може да опитате нещо подобно

Model1::has("model2", "=", 0)->get();

Виж: Ларавел Док - красноречив - Запитващи отношения

Update:

Model1::doesntHave("model2")->get();

1 за отговор № 2

Това може да бъде:

$ids = Model2::where("model1_id", null)->lists("id");
$result = Model1::whereIn("id", $ids)->get();

редактиране:
Трябва да се науча да чета по-добре :) Виждам, че това не е така.

edit2:
Това може да е така. Аз не съм тестван, но ако има грешка, тогава трябва да бъде лесно да се определи! (С помощта на lagbox на IRC канала #laravel)

edit3:
Okey, така че след като го обсъдихме на #laravel с lagbox, има още по-добър начин ... вижте отговора му