【问题标题】:Laravel 5.1 - Querying multiple relationshipsLaravel 5.1 - 查询多个关系
【发布时间】:2015-09-11 15:49:40
【问题描述】:

我遇到了一个不知道如何解决的问题。 我的公司有个人资料(个人资料属于公司)和地点(公司有很多地点)。

我正在尝试获取所有名称类似于 $request->input('search_term') 并且至少有一个位置的邮政编码或城市与​​ $request->input('search_addition') 匹配的公司以及类型为 0 的个人资料。

我的代码是:

$companies = Company::with(['profile' => function ($query) {
                    $query->where('type', 0);

                }])
                ->whereHas('locations', function ($query) use ($request) {
                    $query->where('zip', 'like', '%'.$request->input('search_addition').'%')
                          ->orWhere('city', 'like', '%'.$request->input('search_addition').'%');
                })
                ->where('name', 'like', '%'.$request->input('search_term').'%');

最后我添加$companies = $companies->paginate(25);

我得到的结果不是我想要的。我得到了所有名称如$request->input('search_term') 的公司。它忽略配置文件的类型和位置。对于那些与指定的 search_addition 不匹配但仍返回公司的公司,位置数组为空。

【问题讨论】:

    标签: eloquent laravel-5.1


    【解决方案1】:

    with() 用于有或无约束的关系预加载,不用作过滤父模型的约束,您需要使用where 函数族代替。

    这是我认为代码应该是的(未测试)。

    $companies = Company::with('profile')
        ->with(['locations' => function ($query) use ($request) {
            $query->where('zip', 'like', '%'.$request->input('search_addition').'%')
                ->orWhere('city', 'like', '%'.$request->input('search_addition').'%');
        }])
        ->whereHas('profile', function ($query) {
            $query->where('type', 0);
        })
        ->whereHas('locations', function ($query) use ($request) {
            $query->where('zip', 'like', '%'.$request->input('search_addition').'%')
                ->orWhere('city', 'like', '%'.$request->input('search_addition').'%');
        })
        ->where('name', 'like', '%'.$request->input('search_term').'%');
    

    【讨论】:

    • 不幸的是,这不起作用。回到绘图板,我猜。不过,您对“与”的暗示很好。也许我可以这样解决问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-31
    • 2015-12-05
    • 2021-05-27
    • 1970-01-01
    • 1970-01-01
    • 2018-11-02
    • 2015-05-29
    相关资源
    最近更新 更多