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 . '%');
});
});
});