Php 在laravel中组合查询结果
在我的网站上,用户可以上传图像并在这些图像上附加标签 我有一个图像表,一个标记表和一个图像标记透视表 图像可以有许多标记,并且标记可以属于许多图像 我希望能够生成用户在其图像中使用的所有标记的列表Php 在laravel中组合查询结果,php,mysql,laravel,Php,Mysql,Laravel,在我的网站上,用户可以上传图像并在这些图像上附加标签 我有一个图像表,一个标记表和一个图像标记透视表 图像可以有许多标记,并且标记可以属于许多图像 我希望能够生成用户在其图像中使用的所有标记的列表 $imageIDs = Images::where('created_by', Auth::user()->id)->lists('id'); 因此,这将创建一个用户上传的所有图像ID的列表 我想要的基本上是“foreach$imageIDs,检查images\u标记表,对于每个匹配项,
$imageIDs = Images::where('created_by', Auth::user()->id)->lists('id');
因此,这将创建一个用户上传的所有图像ID的列表
我想要的基本上是“foreach$imageIDs,检查images\u标记表,对于每个匹配项,转到标记表并返回标记名值。”
但我不知道该怎么做
也许foreach会对所有结果使用merge方法?任何帮助都将不胜感激 你能做的就是这样
class Tag extends Model
{
public function images()
{
return $this->belongsToMany(Image::class);
}
}
class SomeController
{
public function someMethod()
{
$tags = Tag::with(['images' => function ($image) {
return $image->where('created_by', Auth::user()->id);
}])->select('id', 'tagname')->get();
// these are your $tags
}
}
您不应该在foreach()中使用查询。那就有结果了。相反,您要做的是使用with()
语句进行快速加载。您需要使用来检查关系:
$userTags = Tags::whereHas('images', function($q) {
$q->where('created_by', auth()->user()->id);
})->get();
然后只需将此数据传递到视图:
return view('some.view', compact('userTags'));
并在视图中的标记上迭代:
@foreach ($userTags as $tag)
{{ $tag->name }}
@endforeach
您将获得收藏
$tag collection
包含与查询匹配的所有标记。很公平。因此,在我的标记模型中,我已经有了第一个函数images(),来完成所有的belongtomany工作。然而,我不确定某种方法是如何工作的。我对拉威尔还是相当陌生的。如何在我的控制器中调用这个函数,以便我可以用$标签返回视图?请考虑<代码> SomeController < /COD>和<代码> SOMMETHODE()一个哑类和一个方法,因为我不知道你的代码结构。你只需要查询部分。@FelixMaxime因为你提到你是新来的,我建议你看一看