如何搜索关系表?

问题描述

我有两个表,第一个是具有idname列的 Category 表。

第二个表是具有idcategory_idname列的产品

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

我的问题是如何在一种口才或数据库查询搜索产品名称及其类别名称


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

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

而且,我想问一下,在这种情况下,最好是雄辩还是使用DB?

解决方法

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

@Override
    public Map.Entry<Location,Data> call() throws InterruptedException {
        Thread.sleep(5000);
        return this.entry;
    }

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

,
$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','%' . $search_text . '%');
            });
        }
    });

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

充分希望它将对您有帮助。