Laravel / Eloquent - 查询 - 选择关系

时间:2014-05-27 22:24:05

标签: php mysql laravel relational-database eloquent

模型

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的任何引用。

这可以通过foreach循环来实现,迭代所有Model1并检查model2 atributte是否 null 。但我想用Eloquent查询来做。

2 个答案:

答案 0 :(得分:6)

您可以尝试类似

的内容
Model1::has('model2', '=', 0)->get();

请参阅:Laravel Docs - Eloquent - Querying Relations

更新

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

答案 1 :(得分:1)

可能是这样:

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

编辑:
我需要学会更好地阅读:)我看到这不是它。

EDIT2:
这可能是它。我还没有测试过它,但是如果有错误则应该很容易修复它! (在IRC频道#laravel的lagbox帮助下)

EDIT3:
Okey,所以在#laravel上用lagbox讨论后,有一个更好的方法......看看他的回答