雄辩关系能否自动将其反向包含在孩子身上?

时间:2016-08-10 15:26:25

标签: php laravel orm eloquent

我有一个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对象的内存中链接?

1 个答案:

答案 0 :(得分:1)

我使用的草率解决方案是无处不在我使用Form->字段关系,我明确地告诉已提取的字段有关其表单:

$form = Form::first();
foreach($form->fields as $field){
  $field->setRelation('form', $form);  // Saved you a query
  echo $field->full_title . "\n";
}

性能更高,但它看起来并不那么......雄辩。

相关问题