在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中搜索关系的主要内容,如果未能解决你的问题,请参考以下文章