我有一个名为List的表,我打算用这个命令显示到视图中:$lists= List::with('user', 'product.photodb', 'tagCloud.tagDetail')->get();
。但是,我希望显示的数据只是TagID等于一个用户输入的数据。可以从TagCloud表中检索这些数据。
我目前正在做的是:
$clouds = TagCloud::select('contentID')
->where('tagDetailID', '=', $tagID)
->get();
$lists = List::with('user', 'product.photodb', 'tagCloud.tagDetail')
->where('id', '=', $clouds->contentID)
->get();
但是当我试图运行它时,它只返回一个空值,即使我在做return $clouds
时,它确实返回了所需的ID。
我哪里做错了?任何帮助表示赞赏!
答案 0 :(得分:1)
您目前的解决方案有几个问题。
get()
会返回Illuminate\Database\Eloquent\Collection
个对象。因此,您无法直接使用$clouds->contentID
,因为$clouds
是一个集合(或者您喜欢的数组)。 See Collection Documentation. where(...)
要求第三个参数为字符串或整数,即单个值。相反,您传递的是collection
,这将无效。正确的方法是使用whereHas()
,它允许您过滤积极的加载关系。
最终代码:
$lists = List::with('user', 'product.photodb', 'tagCloud.tagDetail')
->whereHas('tagCloud',function($query) use ($tagID) {
return $query->where('contentID','=',$tagID);
})
->get();
答案 1 :(得分:0)
你想要的是whereHas()
$list = List::with(...)
->whereHas('relation', function($q) use($id) {
return $q->where('id', $id);
})->get();
答案 2 :(得分:0)
在tagCloud模型方法tagDetail中应用Where where条件
public function tagDetail(){
return $q->where('id', $id);
}