在lalavel外的Illuminate Eloquent ORM中排除关系为空/ null的记录

时间:2016-10-14 06:52:22

标签: php eloquent laravel-orm

状态 - 已解决

我使用在laravel外面照亮ORM 。所以,工作得很好但是我遇到了关系问题。我想排除个人资料 accountDetails 关系 null 的记录。目前我手动提取这些字段并创建另一个数组并返回它,但它有很多处理,所以有任何方法我可以为关系设置一些条件,如果它为null或空排除那些记录。

这是我的代码

$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');
}

先谢谢。 :)

对此有任何帮助。

1 个答案:

答案 0 :(得分: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