我有两个模型……飞机和机芯:
在飞机上:
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%。但是我得到了所有的动向记录,只有标识符正确的那个才具有“飞机”的关系。但是我只需要一个具有一个记录的数组,而只有一个具有正确标识符的数组..这是什么问题?
with()创建一个单独的查询以一次检索所有相关值(紧急加载),而不是根据需要(延迟加载)。
您正在寻找对运动查询添加约束,因此您应该使用whereHas(),如下所示:
$movements = Movement::whereHas('aircraft', function($q)
{
$q->where('identifier', 'like', '%10%');
})->get();
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句