#laravel #orm #model #laravel-8
Вопрос:
Я строю проект с Laravel 8. Мне нужно обработать параметр запроса, который содержит страницу, ограничение, столбец поиска, текст поиска, столбец заказа и директорию заказа. Иногда мне нужно искать в отношениях. Я построил эту систему ниже, но она не работает в отношениях.
$query = (new Log())->newQuery();
$query->with('customer', 'domain', 'type');
if ($request->searchColumn != "" amp;amp; $request->searchColumn != NULL) {
$query->where($request->searchColumn, 'LIKE', '%' . $request->searchText . '%');
}
if ($request->orderColumn != "" amp;amp; $request->orderColumn != NULL) {
$query->orderBy($request->orderColumn, $request->orderDirection);;
}
$logs = $query->paginate($request->limit, ['*'], '', $request->page);
Например, если $request->searchColumn
это ‘customer.name’, как мне следует искать? Я пробовал несколько способов, но они не работают.
Комментарии:
1. Поможет ли ограничение при загрузке? Это добавляет ограничение на модель отношений. laravel.com/docs/7.x/…
2. Должен ли я удалить » с » во второй строке?
Ответ №1:
Вы можете использовать whereHas
метод, позволяющий определить дополнительные ограничения запроса для вашего отношения. Например:
$searchText = $request->searchText;
if ( explode( '.', $request->searchColumn )[0] == 'customer' ) {
$query->whereHas( 'customer', function( $query ) use ( $searchText ) {
$query->where( 'name', 'LIKE', '%' . $searchText . '%' )
});
}
Комментарии:
1. Должен ли я удалить «с» во второй строке?