我是Laravel的新手,我能够查询多对多关系。其中' template_dynamic'是两个表格的模板'模板'和'动态'。
// 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;
我现在要做的是,数据透视表有很多属性&template_dynamic_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');
欢迎任何建议或改进。
提前谢谢。
答案 0 :(得分:0)
首先,我很确定您的关系查询中不需要select('*')
。
但是让我们来解决你的实际问题;)
在Eloquent中访问数据透视表非常简单。
$dynamic_fields = Template::find($rec->template_id)->dynamic;
foreach($dynamic_fields as $dynamic){
var_dump($dynamic->pivot)
}
但事情是,默认情况下,只有数据透视表的键存在于对象中。
要更改它,您必须使用withPivot()
定义它们。实际上就像你已经做过但没有id。
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');