Modelos
class Model1 extends Eloquent {
public function model2() {
return $this->hasOne("Model2");
}
}
class Model2 extends Eloquent {
public function model1() {
return $this->belongsTo("Model1");
}
}
Consulta que quero
Quero que todos os casos sejam Model1
que fazem não tenha um Model2
. Em outras palavras, não há qualquer referência a esse Model1
id
dentro Model2
coluna da tabela model1_id
.
Isto poderia ser conseguido com um foreach
loop, iterando todo o Model1
e verificar se o model2
atributte is nulo. Mas eu quero fazer isso com as consultas do Eloquent.
Respostas:
6 para resposta № 1Você pode tentar algo como
Model1::has("model2", "=", 0)->get();
Vejo: Laravel Docs - Eloquent - Consultando Relações
Atualizar:
Model1::doesntHave("model2")->get();
1 para resposta № 2
Isso pode ser isso:
$ids = Model2::where("model1_id", null)->lists("id");
$result = Model1::whereIn("id", $ids)->get();
editar:
Eu preciso aprender a ler melhor :) Eu vejo que não é isso.
edit2:
Isso pode ser isso. Eu não testei, mas se houver um erro, deve ser fácil consertá-lo! (Com a ajuda do lagbox no canal IRC #laravel)
edit3:
Okey, então depois de discutir isso no #laravel com o lagbox existe uma maneira ainda melhor ... veja a resposta dele