Laravel 4 Eager Load Constraints with BelongsTo

时间:2014-08-19 14:29:49

标签: laravel constraints eager-loading belongs-to

我有两种型号......飞机和机芯:

在飞机上:

public function movements() {
    return $this->hasMany('Movement');
}

在运动中:

public function aircraft() {
    return $this->belongsTo('Aircraft');
}

表格移动:

Schema::create('movements', function($table)
    {
        $table->increments('id');
        $table->boolean('flag_visible')->default(1);
        $table->integer('aircraft_id')->nullable()->default(NULL);
        $table->timestamps();
    });

台式飞机:

Schema::create('aircrafts', function($table)
    {
        $table->increments('id');
        $table->string('identifier');
        $table->timestamps();
    });

现在我想要选择标识符为10的飞机的所有动作:

$movements = Movement::with(array(
            'aircraft' => function($query) {
                $query->where('identifier', 'like', '%10%');
            }
        ));

我只有一个带有aircraft_id的移动记录,其中标识符为%10%。 但我获得所有动作记录,只有具有正确标识符的记录具有关系"飞机"。但我想要一个只有一个记录的数组,只有一个具有正确标识符的数据..这里有什么问题?

1 个答案:

答案 0 :(得分:2)

with()创建一个单独的查询以一次性(急切加载)检索所有相关值,而不是根据需要(延迟加载)。

您希望在移动查询中添加约束,因此您应该使用whereHas(),如下所示:

$movements = Movement::whereHas('aircraft', function($q)
{
    $q->where('identifier', 'like', '%10%');

})->get();