Laravel 关系搜索
Posted
技术标签:
【中文标题】Laravel 关系搜索【英文标题】:Laravel Relationship Search 【发布时间】:2021-08-03 13:11:24 【问题描述】:我正在使用 Laravel 8 构建一个项目。我需要处理包含 page、limit、searchColumn、searchText、orderColumn 和 orderDirection 的请求参数。有时我需要在关系中搜索。我在下面构建了这个系统,但它不适用于关系。
$query = (new Log())->newQuery();
$query->with('customer', 'domain', 'type');
if ($request->searchColumn != "" && $request->searchColumn != NULL)
$query->where($request->searchColumn, 'LIKE', '%' . $request->searchText . '%');
if ($request->orderColumn != "" && $request->orderColumn != NULL)
$query->orderBy($request->orderColumn, $request->orderDirection);;
$logs = $query->paginate($request->limit, ['*'], '', $request->page);
例如,如果$request->searchColumn
是'customer.name',我应该如何搜索?我尝试了几种方法,但它们都不起作用。
【问题讨论】:
约束急切加载有帮助吗?它在关系模型上添加了一个约束。 laravel.com/docs/7.x/… 我应该在第二行删除'with'吗? 【参考方案1】:您可以使用whereHas
方法,该方法允许在您的关系上定义额外的查询约束。例如:
$searchText = $request->searchText;
if ( explode( '.', $request->searchColumn )[0] == 'customer' )
$query->whereHas( 'customer', function( $query ) use ( $searchText )
$query->where( 'name', 'LIKE', '%' . $searchText . '%' )
);
【讨论】:
我应该删除第二行中的'with'吗?以上是关于Laravel 关系搜索的主要内容,如果未能解决你的问题,请参考以下文章
在最近的关系记录中搜索 - Laravel (Eloquent)