【发布时间】:2016-06-07 05:27:16
【问题描述】:
已修复
所以在对这个问题进行了多次回复之后,我终于想出了我真正的问题并得到了回答,但这仍然让我想知道为什么 eloquent 无法处理
A->B->C
给定 A 的对象基于 C 中的值访问所有 B 项(名称=脚本)
下面的解决方案有效,因为 laravel 有范围可以保持干净,但我觉得应该有一个更简单、更快的解决方案。
public function scopeType($query, $type)
{
return $query->join('article_image_types', 'article_image_types.id', '=', 'article_images.article_image_type_id')->where('name', $type);
}
如果您有两个表 image 和 image_type 并且我想查找具有特定类型的所有图像,那在 eloquent 中会是什么样子?
假设你有一种类型为“1”的“脚本”,我知道我可以从图像集合中完成
where('image_type_id', '1')
但是我该怎么做才能使下面的工作正常
where('name', 'script')
目标:
我希望能够从刀片文件中轻松访问这些数据,因此使用范围如下所示
<input type="text" name="['image']['script']" value="{!! $article->articleimage()->type('script') !!}">
甚至可以通过表单模型绑定['image']['script']更好地根据类型访问图像
所以这行得通
foreach($article->articleImages->all() as $item) {
dd($item->articleimagetype->name);
}
并将返回“脚本”
但是如何只得到一个说“脚本”的人
::更新::
所以我设置了范围,但正如我所料,我试图根据辅助表名称来解决这个问题
$query->where('name', $type);
如果我愿意,你的解决方案会起作用
$query->where('image_type_id', 1);
SQLSTATE[42S22]:未找到列:1054 中的未知列“名称” 'where 子句' (SQL: select * from
article_imageswherearticle_images.article_id= 32 和article_images.article_id不为空且name= 脚本)
更新
因此,执行以下操作会产生我想要的结果,除非我没有取回类型名称,而且我似乎无法用 has('articleimagetype') 或 has('articleimages.articleimagetype') 取回它
$article->articleImages()->whereHas('articleimagetype', function($query){
$query->where('name', 'script');
})->has('articleimagetype')->get();
【问题讨论】:
-
我在这里没有看到问题
-
我不能让它只返回图像类型名称为“脚本”的那个,它会返回所有三个,但对于没有脚本的那些,它会给出一个 null 类型我运行我刚刚添加的脚本。