Исключить записи, которые имеют отношение empty / null в Illuminate Eloquent ORM вне laravel

#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-й метод — вот путь