我有什么
有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个唯一的项目-效果很好
问题:如何正确地通过模板名称和与模板相关的关键字(多对多)进行搜索?
非常感谢大家!