在laravel 8中搜索关系

Posted

技术标签:

【中文标题】在laravel 8中搜索关系【英文标题】:searching with relationship in laravel 8 【发布时间】:2021-10-22 12:43:25 【问题描述】:

我有一个Category模型,一个product model,它们之间有关系...所以现在我想做一个serch,当用户写category的名称时,我需要返回这个category内的所有产品,表格和关系是正确的......我试过这种方式,但没有奏效:

其中 ($q) 是输入文本名称:-

 $catSearches = Category::whereHas('products', function ($query) use ($q)
        $query->where('name', 'like', '%'.$q.'%');
    )
        ->with(['products' => function($query) use ($q)
            $query->where('name', 'like', '%'.$q.'%');
        ])->get();

也试过这种方式,同样的问题:

$catSearches = Category::with('products')->where('name', 'LIKE', "%$q%" )->get();

【问题讨论】:

【参考方案1】:

第二种格式是正确的,但没有

$catSearches = Category::with('products')->where('name', 'LIKE', '%'.$q.'%' )->get();

如果您只需要产品(不包括类别)

$products = Products::whereHas('category', function($categoryQuery) use ($q)
    $categoryQuery->where('name', 'LIKE', '%'.$q.'%' );
)->get();

【讨论】:

它只是显示我搜索它的类别的信息吗? @OsamaMohammed 并且它在“产品”属性中包含产品。如果您只想要产品,请使用第二种解决方案。【参考方案2】:

如果您只想退回产品而不是在类别内,则需要采用其他方式。

$products = Product::whereHas('category', function ($q) use ($search) 
        $q->where('name', 'LIKE', '%' . $search . '%');
)->get();

它将返回所有匹配类别名称的产品。

【讨论】:

以上是关于在laravel 8中搜索关系的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 关系搜索

在 laravel 中搜索表及其关系

Laravel 搜索关系

Laravel 8 工厂的多重关系

尝试在 laravel 中的表或关系中搜索

Laravel - 搜索关系,包括 whereHas 中的 null