如何按关系表列条件查询表

时间:2019-11-27 04:57:58

标签: php laravel

我有模型用户

class Users extends Model implements  AuthenticatableContract
{
    use Authenticatable,HasApiTokens;

    protected $primaryKey = 'user_id';
    protected $fillable = ['email','password','email_token', 'verified'];

    public function user_info()
    {
        return $this->hasOne('App\Models\UserInfo','user_id');
    }

}

在控制器中,我想查询关系表列“种类”等于1的所有用户。

So Users table has user_info_id(one to one) . User_info has kind_id.

我希望通过关系表列kind_id查询用户。 我可以通过左加入来做到。但是我该如何处理关系呢?

我尝试过这样,但是没有用

$univer_list = Users::with('user_info')->where('is_university',1)
            ->where('kind_id',1);

2 个答案:

答案 0 :(得分:0)

您可以在with

中创建此条件
$univer_list = Users::with(['user_info' => function($q) {
                        $q->where('kind_id', 1);
                    }])->where('is_university', 1)->get();

我假设您的is_universityusers表中,而您的kind_id列在user_info表中。

答案 1 :(得分:0)

您可以使用whereHas根据存在的关系进行查询:

$univer_list = Users::where('is_university', 1)
    ->whereHas('user_info', function ($query) {
        $query->where('kind_id', 1);
    })->get();

仅获取与Users有关系(其中User等于1)的UserInfo,应将其命名为kind_id

Laravel 6.x Docs - Eloquent - Relationships - Querying Relationship Existence