我有一个Eloquent(Laravel 5.1)关系,如:
class Form extends Model {
public function fields(){
return $this->hasMany('App\Models\Field');
}
}
class Field extends Model {
public function form(){
return $this->belongsTo('App\Models\Form');
}
public function getFullTitleAttribute(){
return $this->form->title . ', ' . $this->title;
}
}
我有几个查找表单的进程,然后对于每个字段,使用full_title
属性(取决于字段的表单)执行某些操作,例如,
$form = Form::first();
foreach($form->fields as $field){
echo $field->full_title . "\n";
}
问题在于每个Field都会进行数据库查询以查找表单,这会带来大量不必要的流量。
有没有办法更新关系,以便Field对象已经有一个指向Form对象的内存中链接?
答案 0 :(得分:1)
我使用的草率解决方案是无处不在我使用Form->字段关系,我明确地告诉已提取的字段有关其表单:
$form = Form::first();
foreach($form->fields as $field){
$field->setRelation('form', $form); // Saved you a query
echo $field->full_title . "\n";
}
性能更高,但它看起来并不那么......雄辩。