固定
因此,经过对这个问题的多次回答,我终于得到了我的真实问题的思考和回答,但它仍然让我想知道为什么雄辩不能处理
的问题A-> B-> C
给定A的对象基于C(name = script)
中的值访问所有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中会是什么样子?
假设您有一种ID为“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);
}
并将返回“script”
但是怎么只得到那个说“脚本”的人
:: UPDATE ::
所以我设置了范围,但正如我所预期的那样,我试图根据辅助表名称这样做
$query->where('name', $type);
如果我想做,你的解决方案就可以了
$query->where('image_type_id', 1);
SQLSTATE [42S22]:找不到列:1054未知列'名称' 'where子句'(SQL:select * from
article_images
wherearticle_images
。article_id
= 32和article_images
。article_id
不为空且name
=脚本)
更新
所以做下面的事情会产生我想要的东西除了我没有得到一个类型名称,我似乎无法用has('articleimagetype')或者有('articleimages.articleimagetype')
$article->articleImages()->whereHas('articleimagetype', function($query){
$query->where('name', 'script');
})->has('articleimagetype')->get();
答案 0 :(得分:1)
只需使用join:
\DB::table('image')
->join('image_type','image_type.id','=', 'image.image_type_id')
->where('image_type.name','=','script')
->get();
编辑:
在你的GOAL更新后,我看到了你想要的东西。 Laravel有一个名为query scope
的功能,可以让您轻松找到您想要的数据。
在Articleimage
模型中,创建范围:
public function scopeType($query, $type)
{
return $query->join('article_image_type','article_image_type.id','article_image.type_id')
->where('type', $type);
}
然后你可以$article->articleimage()->type('script')
。