/ / Laravel / Eloquent - Consulta - Selecione com relacionamento - php, mysql, laravel, banco de dados relacional, eloqüente

Laravel / Eloquent - Consulta - Selecione com relacionamento - php, mysql, laravel, banco de dados relacional, eloqüente

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 № 1

Você 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