猿问

如何通过关系表列条件查询表

我有模型用户


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

    }


}

在控制器中,我想查询关系表列 "kind" 等于 1 的所有用户。


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

我想通过关系表列 kind_id 查询用户。我可以通过 left join 做到这一点。但是我怎么能用关系来做呢?


我试过这样但它不起作用


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

            ->where('kind_id',1);


眼眸繁星
浏览 150回答 2
2回答

潇潇雨雨

您可以使用whereHas基于关系的存在进行查询:$univer_list = Users::where('is_university', 1)    ->whereHas('user_info', function ($query) {        $query->where('kind_id', 1);    })->get();只获取与where等于 1有关系的,Users应该命名为。UserUserInfokind_id

Qyouu

您可以在with$univer_list = Users::with(['user_info' => function($q) {                        $q->where('kind_id', 1);                    }])->where('is_university', 1)->get();我假设您is_university存在于users表中,并且您的kind_id列存在于user_info表中。
随时随地看视频慕课网APP
我要回答