2014-10-20 67 views
3

我是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

首先,我非常肯定你不需要select('*')在你的关系查询那里。

但是,让我们给你的实际的问题;)

要访问的数据透视表中雄辩是非常简单的。

$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'); 
相关问题