Laravel 5 数据透视表问题
Posted
技术标签:
【中文标题】Laravel 5 数据透视表问题【英文标题】:Laravel 5 pivot table issue 【发布时间】:2015-09-21 09:37:38 【问题描述】:我不确定如何解释我的问题,但我会试一试。
我正在使用 Laravel 5,我有 3 个表:
页 语言 语言页面这是我的模型的样子: 页面模型:
public function languages()
return $this->belongsToMany('App\Language', 'language_page')
->withPivot('title', 'content', 'slug', 'meta_title', 'meta_description')
->orderBy('main', 'desc');
语言模型:
public function pages()
return $this->belongsToMany('App\Page')
->withPivot('title', 'content', 'slug', 'meta_title', 'meta_description');
我想要从页表中返回一条记录,其中 language_id 是某个 id,slug 是某个文本。
这是我目前得到的:编辑:
Page::with(['languages' => function($q) use($language_id, $slug)
$q->where('language_id', $language_id);
$q->wherePivot('slug', $slug);
])
->first();
我的问题:如何添加带有列 slug 的 where 子句(来自数据透视表 language_page)?
我希望这有任何意义..
【问题讨论】:
【参考方案1】:Eloquent 的 BelongsToMany 类有一个
wherePivot()
允许您将 WHERE 子句直接应用于数据透视表的方法,请参阅:
https://github.com/laravel/framework/blob/5.1/src/Illuminate/Database/Eloquent/Relations/BelongsToMany.php#L111
【讨论】:
我更新了我的问题,这就是我将其更改为的内容,尽管它的输出将始终是第一条记录(它忽略了 where 子句之类的东西?) 你能检查一下生成了什么SQL吗?只需将 ->first() 替换为 ->toSql() 和 dd() 该值 hm 很奇怪.. 这就是我得到的:“select * frompages
”,是不是因为我使用的是语言中的 where,而不是直接在 pages 表本身中?
您确定结果无效吗?您按 language_id 和 slug 过滤,因此对于给定的 language_id,似乎只有一个带有给定 slug 的页面,对吧?
我第一次没有正确刷新,上面代码中 dd() 的输出是一个 id 为 1 的页面(第一条记录,并且带有 slug/language_id whereclause它应该是页面 id 2),如果我检查 dd() 语言中的关系结果为空:S以上是关于Laravel 5 数据透视表问题的主要内容,如果未能解决你的问题,请参考以下文章