首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel具有影响输出的" with“关系数据的雄辩条件

Laravel具有影响输出的" with“关系数据的雄辩条件
EN

Stack Overflow用户
提问于 2020-01-02 17:57:43
回答 2查看 69关注 0票数 0

下面是我的代码:

代码语言:javascript
复制
$search = request()->get('search');

    if(Auth::user()->hasRole('admin') || true) {
        list($orderBy, $orderDirection) = explode('.', request()->get('sort_by'));
        $prestations = Prestation::with(
            [
            'service' => function($service) use($search){
                $service->select(['id','name']);
                ->where('name', 'regexp', "/$search/i"); <--- HERE THE PROBLEM, i get some "null" values in the output, it's not a really condition to display or not
            },
            'facility' => function($facility) {
                $facility->select(['id','name']);
            }
            ]
        )
            ->where('name', 'regexp', "/$search/i") <-- I want to do this with service name
            ->orderBy($orderBy, $orderDirection)
            ->simplePaginate(50);

        $res = [
            'results' => $prestations,
            'total' => Prestation::all()->count(),
        ];

        return $res;

我想对我的'service:name‘做一个where条件,它确实会影响输出,并且不会像->where('name', 'regexp', "/$search/i")那样显示值为"null“的数据,但我不知道如何访问"with”关系的"service:name“。

谢谢,祝你新年快乐!

EN

回答 2

Stack Overflow用户

发布于 2020-01-02 18:09:05

您可以使用LIKE运算符执行此操作:

代码语言:javascript
复制
$prestations = Prestation::with(
        [
            'service' => function($service) use($searchTerm){
                $service->select(['id','name'])->where('name', 'LIKE', "%$searchTerm%");
            },
        ]
    )->orderBy($orderBy, $orderDirection)->simplePaginate(50);

如果要搜索包含搜索词的记录,请使用LIKE '%$searchTerm%'

  • If;如果要搜索以搜索词开头的记录,请使用LIKE '$searchTerm%'

  • And;如果要搜索以搜索词结尾的记录,请使用LIKE '%$searchTerm'

;如果要搜索包含搜索词的记录,请使用

希望这能帮到你

票数 0
EN

Stack Overflow用户

发布于 2020-01-02 18:40:17

您可以使用whereHas来完成此操作

代码语言:javascript
复制
$prestations = Prestation::whereHas('service', function($subQuery) use($search) {
                $subQuery->where('name', 'like', '%' . $search . '%');
            })->with(
    [
        'service' => function($service) use($search){
            $service->select(['id','name'])->where('name', 'like', '%' . $search . '%');
        },
    ]
)->orderBy($orderBy, $orderDirection)->simplePaginate(50);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59561378

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档