laravel怎么用ORM实现连表查询

比方说有users和usersinfo两张表:
users有username,password,uid字段。
usersinfo有uid,email。
用ORM的话要怎么写才能达到跟原生的 where users.uid=usersinfo.uid一样?
求大神解答

阅读 10.1k
5 个回答

既然你使用了ORM,那应该就是模型关联了,详见
因为 usersusersinfo 是一对一的关联关系,因此可以在 User 的模型中如下写道:

class User extends Model
{
    public function userinfo()
    {
        return $this->hasOne(UserInfo::class, 'uid', 'uid');
        // 第一个参数为关联的模型名字,第二个参数为外键,第三个参数为主键
    }
}
$users = DB::table('users')
            ->leftJoin('usersinfo', 'users.uid', '=', 'usersinfo.uid')
            ->get();

Model中使用$model::where()->with(['userinfo])->get(),
AppModelUser中
public function userinfo(){

$this->hasOne(UserInfo::class,'id','uid')

}

大致是这样

orm最终执行的sql不是users.uid=userinfo.uid
文档都有

想要创建一个原生表达式,可以使用 DB::raw 方法

//where users.uid=usersinfo.uid

->where('users.uid', DB::raw('usersinfo.uid'))

关于join的写法可以参数前面的答案

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题