【问题标题】:How to search into relation table?如何搜索关系表?
【发布时间】:2020-08-13 06:11:14
【问题描述】:

我有两个表,第一个是 Category 表,其中包含 idname 列。

第二个表是Product,它有idcategory_idname 列。

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

我的问题是如何在一个 Eloquent 或 DB 查询中搜索产品名称和类别名称?


我尝试了下面的代码,它适用于产品名称,但是当我搜索类别名称时它什么也没返回。

$searchText = $request->input('search');
Product::query()
    ->where(function($query) use($searchText){
        if($searchText) {
            $query->where('name', 'LIKE', '%'.$searchText.'%')
                ->orWhere(function($query2) use($searchText) {
                    $query2->with(['category' => function($query3) use ($searchText){
                        $query3->where('name', 'like', '%'.$searchText.'%');
                    }]);
                });
        }
    })
    ->paginate(8);

另外,我想问一下这个场景用 Eloquent 还是 DB 最好?

【问题讨论】:

标签: laravel eloquent laravel-6


【解决方案1】:
$query = Product::query()->with('category')
            ->where(function($query) use($request) {
        if ($request->input('search')) {
            $search_text = $request->input('search');
            $query->where('name', 'Like', '%' . $search_text . '%')
            ->orWhereHas('category', function ($query2)use($search_text) {
                $query2->where('name', 'Like', '%' . $search_text . '%');
            });
        }
    });

    $query1 = $query->paginate(8);

希望它对您有帮助。

【讨论】:

    【解决方案2】:

    我认为你可以使用 orWhereHas 来做到这一点:

     $searchText = $request->input('search');
          $query=  Product::query()->with('category');
    
          if($searchText)
          {
              $query=$query->where('products.name','Like','%'.$searchText.'%')
                  ->orWhereHas('category',function ($query)use($searchText)
                  {
                      $query->where('categories.name','Like','%'.$searchText.'%');
                  });
          }
          $query=$query->paginate(8);
    

    您可以使用 (DB) 并连接两个表,但没有预加载,因此结果将只是行...

    【讨论】:

    • 错误返回 Illuminate\Database\QueryException: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'categories.name' in 'where clause'
    • 你应该用模型类别的表名替换类别,对于产品模型的表名,'products'也一样
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-30
    • 2015-06-11
    相关资源
    最近更新 更多