Laravel中多对多关系的多重搜索子句

Posted

技术标签:

【中文标题】Laravel中多对多关系的多重搜索子句【英文标题】:Multiple search clause for many-to-many relationships in Laravel 【发布时间】:2021-10-18 21:13:44 【问题描述】:

美好的一天。我有这些东西在我的应用程序中对我来说有点问题。我有一个员工模型,它与公司模型有多对多的关系。因此,我有一个 company_staff 表。因此,这些公司有一个唯一标识符,即公司代码。 员工模型包含名字、姓氏和电子邮件等信息。现在,我想使用名字、姓氏或电子邮件执行搜索操作,但只获取具有唯一代码的公司的数据(即仅在内部搜索那家公司)。这是我在下面提出的查询:

$users = Staff::where('first_name', 'like', '%' . $request->search_term . '%')
            ->orWhere('last_name', 'like', '%' . $request->search_term . '%')
            ->orWhere('email', 'like', '%' . $request->search_term . '%')
            ->whereHas('coporate', function ($q) use ($company_code) 
                $q->where('company_code', $company_code);
            )->get();

我得到了结果,但这仅返回与我的“员工”表匹配的所有结果,表现得好像查询的“公司代码”部分根本不存在。但是,如果我将查询保留为:

$users = Staff::where('first_name', 'like', '%' . $request->search_term . '%')
            ->whereHas('coporate', function ($q) use ($company_code) 
                $q->where('company_code', $company_code);
            )->get();

我得到了想要的结果。但是,我也希望能够同时使用姓氏和电子邮件进行搜索。请问,我该怎么办?

【问题讨论】:

【参考方案1】:

试试这个代码

$users = Staff::where(function ($query) use($request) 
            $query->where('first_name', 'like', '%' . $request->search_term . '%')
                ->orWhere('last_name', 'like', '%' . $request->search_term . '%')
            ->orWhere('email', 'like', '%' . $request->search_term . '%');
        )->whereHas('coporate', function ($q) use ($company_code) 
                $q->where('company_code', $company_code);
            )->get();

更多:https://laravel.com/docs/6.x/queries#parameter-grouping

【讨论】:

以上是关于Laravel中多对多关系的多重搜索子句的主要内容,如果未能解决你的问题,请参考以下文章

未找到列:Laravel 5 多对多关系查询中“on 子句”中的 1054 未知列“managers.id”

Laravel 多对多关系搜索

laravel中具有多对多关系的高级搜索

在 laravel 中搜索查询并计算结果的多对多关系

数据库中多对多关系及其实现

XAF中多对多关系 (XPO)