Laravel 多对多和即时加载查询
我是拉拉维尔的新手,我能够查询多对多的关系。其中“template_dynamic”是两个表“template”和“dynamic”的轴心Laravel 多对多和即时加载查询,laravel,laravel-4,eloquent,Laravel,Laravel 4,Eloquent,我是拉拉维尔的新手,我能够查询多对多的关系。其中“template_dynamic”是两个表“template”和“dynamic”的轴心 // Template Model class Template extends Eloquent { protected $table = 'template'; protected $guarded = array('template_id'); protected $primaryKey = 'template_id';
// Template Model
class Template extends Eloquent
{
protected $table = 'template';
protected $guarded = array('template_id');
protected $primaryKey = 'template_id';
public function dynamic()
{
return $this->belongsToMany('dynamic', 'template_dynamic')
->select('*')
->withPivot('template_dynamic_id')
->orderBy('template_dynamic_html_sort', 'ASC');
}
在这里,我能够检索到这些记录
// Template Controller
$dynamic_fields = Template::find($rec->template_id)->dynamic;
我现在想做的是pivot表有许多属性“template\u dynamic\u option”。如何查询记录并将其与$dynamic_fields变量组合
// What I want to do is something like this. But sadly this is an invalid syntax
$dynamic_fields = $dynamic_fields->with('template_dynamic_option');
欢迎提出任何建议或改进
提前谢谢。首先,我很确定您不需要在您的关系查询中使用
选择('*')
但让我们谈谈你的实际问题;)
在Eloquent中访问pivot表非常简单
$dynamic_fields = Template::find($rec->template_id)->dynamic;
foreach($dynamic_fields as $dynamic){
var_dump($dynamic->pivot)
}
但问题是,默认情况下,对象中只存在透视表的键。
若要更改,必须使用withPivot()
定义它们。事实上,就像你已经做过的,但不是用身份证
public function dynamic()
{
return $this->belongsToMany('dynamic', 'template_dynamic')
->withPivot('template_dynamic_option')
->orderBy('template_dynamic_html_sort', 'ASC');
}
如果有多个附加列,请使用以下语法:
->withPivot('template_dynamic_option', 'foo', 'bar');