2016-10-14 3 views
1

Статус - РешенныйИсключить записи, которые имеют отношение пустой/нуль в Illuminate красноречивый ОРМ вне Laravel

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

Вот мой код

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

В пользователя Модель, я создал два отношения ИЭ. профиль и AccountDetails

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

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

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

Любая помощь по этому поводу.

ответ

4

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

$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

+0

второй метод здесь путь –