Поиск отношений в Laravel

#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. Должен ли я удалить «с» во второй строке?