我有两种型号......飞机和机芯:
在飞机上:
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%。 但我获得所有动作记录,只有具有正确标识符的记录具有关系"飞机"。但我想要一个只有一个记录的数组,只有一个具有正确标识符的数据..这里有什么问题?
答案 0 :(得分:2)
with()创建一个单独的查询以一次性(急切加载)检索所有相关值,而不是根据需要(延迟加载)。
您希望在移动查询中添加约束,因此您应该使用whereHas(),如下所示:
$movements = Movement::whereHas('aircraft', function($q)
{
$q->where('identifier', 'like', '%10%');
})->get();