gpt4 book ai didi

laravel - 多对多和急切加载查询

转载 作者:行者123 更新时间:2023-12-02 04:52:38 25 4
gpt4 key购买 nike

我是 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');

欢迎提出任何建议或改进。

提前谢谢你。

最佳答案

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

关于laravel - 多对多和急切加载查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26463458/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com