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

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

я использую Осветить ОРМ снаружи ларавеллы. Так что пока все работает хорошо, но у меня проблемы с отношениями. Я хочу исключить те записи, чьи профиль а также Детали учетной записи отношение пустой или же ноль. В настоящее время я вручную извлекаю эти поля и создаю другой массив и возвращаю его, но он занимает много времени, поэтому есть ли способ, которым я могу поставить какое-то условие для отношения, если оно пустое или пустое, исключая эти записи.

Вот мой код

$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#joins


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

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

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#querying-relations

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]