【问题标题】:Laravel Relationship SearchLaravel 关系搜索
【发布时间】: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'吗?

标签: laravel orm model laravel-8


【解决方案1】:

您可以使用whereHas 方法,该方法允许在您的关系上定义额外的查询约束。例如:

$searchText = $request->searchText;
if ( explode( '.', $request->searchColumn )[0] == 'customer' ) {
    $query->whereHas( 'customer', function( $query ) use ( $searchText ) {
         $query->where( 'name', 'LIKE', '%' . $searchText . '%' )
    });
}

【讨论】:

  • 我应该删除第二行中的'with'吗?
猜你喜欢
  • 2015-10-30
  • 2015-06-11
  • 2018-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-30
  • 2015-10-29
相关资源
最近更新 更多