【问题标题】:searching with relationship in laravel 8在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();

【问题讨论】:

    标签: laravel search relationship


    【解决方案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();
    

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

    【讨论】:

      猜你喜欢
      • 2021-09-19
      • 2015-10-30
      • 2015-06-11
      • 1970-01-01
      • 1970-01-01
      • 2018-11-09
      • 1970-01-01
      • 2019-02-04
      • 2021-12-15
      相关资源
      最近更新 更多