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因为你提到你是新来的,我建议你看一看