如何搜索关系table?

How to search into relation table?

我有两个 table,第一个是 Category table,它有 idname 列。

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

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

我的问题是如何在一个 Eloquent 或数据库查询中搜索产品名称及其类别名称?


我试过下面的代码,它适用于产品名称,但是当我搜索类别名称时,它 returns 没有。

$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哪个最好用?

我想你可以使用 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) 并连接两者 table,但没有预先加载,因此结果将只是行 ...

$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);

希望对您有所帮助。