【问题标题】:Many-to-Many and Eager loading query多对多和渴望加载查询
【发布时间】:2014-12-15 07:20:44
【问题描述】:

我是 Laravel 的新手,我能够查询多对多关系。其中 '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;

我现在想要做的是数据透视表有很多属性'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');

欢迎任何建议或改进。

提前谢谢你。

【问题讨论】:

    标签: laravel laravel-4 eloquent


    【解决方案1】:

    首先,我很确定您的关系查询中不需要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');
    

    【讨论】:

      猜你喜欢
      • 2014-11-29
      • 2016-01-10
      • 1970-01-01
      • 2017-06-06
      • 1970-01-01
      • 2013-08-03
      • 1970-01-01
      • 1970-01-01
      • 2015-05-16
      相关资源
      最近更新 更多