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

Статус - Решено

Я использую Illuminate ORM вне laravel. Так что пока все работает хорошо, но у меня проблемы с отношениями. Я хочу исключить те записи, чей профиль и отношение accountDetails пустые или нулевые. В настоящее время я вручную извлекаю эти поля и создаю другой массив и возвращаю его, но он занимает много времени, поэтому есть ли способ, которым я могу поставить какое-то условие для отношения, если оно пустое или пустое, исключая эти записи.

Вот мой код

$users = \App\User::where('account_type_id', 2)
    ->with('profile', 'accountDetails')
    ->get()
    ->toArray();

В пользовательской модели я создал два отношения, т.е. профиль и учетная запись

public function profile()
{           
    return $this->hasOne('\App\UserProfile', 'user_id', 'id');
}

public function accountDetails()
{
    return $this->hasMany('\App\Wallet', 'user_id', 'id');
}

Заранее спасибо.:)

Любая помощь по этому вопросу, пожалуйста.

1 ответ

Решение

Один из способов сделать это - использовать механизм соединения.

$users = \App\User::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


Второй метод, использующий красноречивые отношения,

На модели пользователя:

public function profile() {
    return $this->hasOne('\App\UserProfile', 'user_id', 'id');
}

public function accountDetails(){    
    return $this->hasMany('\App\Wallet', 'user_id', 'id');
}

Тогда запрос:

$users = \App\User::where('account_type_id', 2)
    ->has('profile')
    ->has('accountDetails')
    ->get()
    ->toArray();

has метод запроса: https://laravel.com/docs/5.2/eloquent-relationships

Другие вопросы по тегам