具有多对多关系的Laravel雄辩的加入请求无法正常工作

时间:2019-11-24 15:15:59

标签: laravel eloquent

我有什么

有2种型号:

  • 模板
  • 关键字

它们之间的联系就像 多对多 关系

我想做什么:

我想添加按名称和关键字名称进行模板搜索。 仅按模板名称实现搜索非常容易,但是当我尝试同时按关键字名称搜索(使用连接)时,返回错误结果

我尝试过的方法: 我尝试使用下一个代码:

$approved_items = Template::where(['contributor_id' => $contributor_id, 'type' => $type, 'status' => 3])
    ->whereNull('identity_kit_id') // get the templates which are not related to any identity kit (it's smth like pack)
    ->when(!empty($keyword) && strlen($keyword) > 3, function ($query) use ($keyword, $date_order) {
        return $query->join('keyword_template', 'templates.id', '=', 'keyword_template.template_id')
           ->join('keywords', 'keywords.id', '=', 'keyword_template.keyword_id')
           ->where('keywords.name', 'LIKE', "$keyword%")
           ->orWhere('templates.file_name', 'LIKE', "$keyword%")
           ->orderBy('templates.updated_at', $date_order);
        }, function ($query) use ($keyword, $date_order) {
            return $query->orderBy('updated_at', $date_order);
        })
        ->get();

我得到的:

当我执行请求id时,返回的模板名称正确,但是当我不使用联接时,它返回9个项目(重复项)而不是3个唯一的项目-效果很好

问题:如何正确地通过模板名称和与模板相关的关键字(多对多)进行搜索?

非常感谢大家!

0 个答案:

没有答案