【问题标题】:Search in the related model in Laravel在 Laravel 中搜索相关模型
【发布时间】:2021-02-27 14:49:07
【问题描述】:

我有这样的表:

id | post_title | category_id

这是分类表

id | category_title

这是post模型内部的这两者之间的关系:

  public function category()
    {
        return $this->belongsTo(Category::class, 'category_id', 'id');
    }

我想获取post表中category_title或post_title与用户输入的关键字匹配的记录。

我正在检索类似以下的数据:

Post::where(['title'=>$request->title])->with('category')->paginate(10);

但这里它只是获取帖子标题,但我也希望它在类别标题中搜索它。

非常感谢任何帮助。

【问题讨论】:

    标签: laravel laravel-5 eloquent


    【解决方案1】:
    Post::where('title', 'like', '%'.$request->title.'%')->with(['category' => function($query) use ($request){
            $query->where('category_title', 'like', '%'.$request->title.'%');
        }])->paginate(10);
    

    在上面的代码sn -p

    1. 我们正在获取与请求匹配的标题
    2. with(['category' => function($query) use ($request):laravel 使用闭包函数将结果匹配到关系中,闭包函数接受一个参数$request 我们再次过滤与此参数 $request->title 的关系,该参数来自Request $request

    您可以使用上面的代码,也可以为可重用性设置一个范围。

    【讨论】:

      【解决方案2】:

      试试这个:-

      $keyword = $request->input('title');
      
      Post::with('category')
           ->where('title', 'like','%'.$keyword.'%')
           ->orWhere('category.category_title','like','%'.$keyword.'%')
           ->paginate(10);
      

      【讨论】:

        【解决方案3】:

        你应该使用orWhereHas:

         Post::where(['title' => $request->title])->
                orWhereHas('category',function ($query)use($request){
                    $query->where('category_title',$request->title);
                })->with('category')-> paginate(10);
        

        【讨论】:

        • 虽然这段代码可能会解决问题,但一个好的答案应该解释代码的什么以及它如何提供帮助。
        • 没有“what and how”的答案是不完整的答案,但也不错
        【解决方案4】:
        Post::->where('title', 'like', '%'.$request->title.'%')->with(['category' => function($query) use ($request){
            $query->where('category_title', 'like', '%'.$request->title.'%');
        }])->paginate(10);
        

        【讨论】:

        • 虽然这段代码可能会解决问题,但一个好的答案应该解释代码的什么以及它如何提供帮助。
        猜你喜欢
        • 1970-01-01
        • 2021-01-13
        • 2015-05-08
        • 2015-05-09
        • 1970-01-01
        • 1970-01-01
        • 2017-06-03
        • 2019-02-07
        • 2020-12-10
        相关资源
        最近更新 更多