Laravel 多对多和即时加载查询

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_dynamic”是两个表“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;
我现在想做的是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');