Laravel красноречивый поиск по полям связанной модели

у меня есть красноречивые модели, как,

пользователей : пользователи (id, имя пользователя, пароль, электронная почта, статус)

профиль : профили (id, user_id, first_name, last_name, gender, dob)

в логике контроллера я с нетерпением загружаю модель профиля.

Я могу это сделать,

$user = User::with('Profile')->get();

или

$user = User::with('Profile')->where('status', '1')->get();

но как это сделать что-то вроде

$user = User::with('Profile')->where('status', '1')->where('gender', 'Male')->get();

2 ответов


вот тут whereHas пригождается:

$user = User::with('Profile')->where('status', 1)->whereHas('Profile', function($q){
    $q->where('gender', 'Male');
})->get();

в основном он добавляет условие, что пользователь должен иметь профиль с gender = Male


Если вы хотите искать несколько столбцов в модели отношений.

        $searchText = 'test text';
        Product::with('owner')->where(function($query) use ($searchText)
        {
            $query->where('product_name', 'LIKE', '%' . $searchText . '%');

            $columns = ['product_code', 'place_location', 'remark'];

            foreach ($columns as $column ) {
                $query->orWhere($column, 'LIKE', '%' . $searchText . '%');
            }

            $query->orWhereHas('owner', function($q) use ($searchText) {
                $q->where(function($q) use ($searchText) {
                    $q->where('name', 'LIKE', '%' . $searchText . '%');
                    $q->orWhere('company_name', 'LIKE', '%' . $searchText . '%');
                });
            });

        });