#php #eloquent
#php #eloquent
Вопрос:
Статус — разрешен
Я использую Illuminate ORM вне laravel. Итак, пока все работает хорошо, но у меня проблемы с отношением. Я хочу исключить те записи, отношение profile и accountDetails к которым является пустым или нулевым. В настоящее время я вручную извлекаю эти поля, создаю другой массив и возвращаю его, но его много обработки, так есть ли какой-нибудь способ, где я могу поставить какое-либо условие для отношения, если оно равно нулю или пусто, исключить эти записи.
Вот мой код
$users = AppUser::where('account_type_id', 2)
->with('profile', 'accountDetails')
->get()
->toArray();
В пользовательской модели я создал два отношения, т.Е. данные профиля и учетной записи
public function profile()
{
return $this->hasOne('AppUserProfile', 'user_id', 'id');
}
public function accountDetails()
{
return $this->hasMany('AppWallet', 'user_id', 'id');
}
Заранее спасибо. 🙂
Любая помощь по этому вопросу, пожалуйста.
Ответ №1:
Один из способов сделать это — использовать механизм объединения.
$users = AppUser::join('profile','profile.user_id','=','user.id')
->join('wallet','wallet.user_id','=','user.id')
->where([
['user.account_type_id','=',2],
['profile.id','=',null],
['wallet.id','=',null]
])
->get()
->toArray();
Объединения: https://laravel.com/docs/5.2/queries#joins
Второй метод, использующий отношения eloquent,
В пользовательской модели:
public function profile() {
return $this->hasOne('AppUserProfile', 'user_id', 'id');
}
public function accountDetails(){
return $this->hasMany('AppWallet', 'user_id', 'id');
}
Затем запрос:
$users = AppUser::where('account_type_id', 2)
->has('profile')
->has('accountDetails')
->get()
->toArray();
has
метод запроса: https://laravel.com/docs/5.2/eloquent-relationships#querying-relations
Комментарии:
1. 2-й метод — вот путь