Laravel 多对多关联如何查询未关联的数据?

目前有两表,分别为如下结构:

companys

companys_table = [
    'id',
    'name',
    'created_at',
    'updated_at',
]

users_table =[
    'id',
    'name',
    'password',
    'created_at',
    'updated_at',
]

两张表间的关系为多对多关系,中间表结构如下

users_has_companys_table =[
    'user_id',
    'company_id'
]

功能需求是为某个公司添加员工,例如为 A 公司添加员工,管路员输入用户名称的关键字使用远程搜索,从后端查询出还未加入此公司的员工(未和 A 公司建立关联的 User),有哪些比较优雅的查询方法呢?

阅读 3.5k
2 个回答

第一种方法利用“渴求加载”
在users_has_companys_table的model中定义一个函数

public function user()
    {
        //假设你的user表的命名空间为App\Models\users
        //这里定义了两个模型的关系。即任何一个在users_has_companys_table的记录都有唯一一个user记录与之对应
        return $this->hasOne('App\Models\users','user_id','id');
    }

在users_has_companys_table里面的查询方法

$this->select('id')->where('company_id','!=',$company_id)->with('user')->get();//这里的user就是你在上面定义关系的函数名

第二种方法就是用简单的关联查询,你的业务逻辑应该只需要两张表连接。因此就不在这写了。
个人推荐第二种方法。所谓的优雅就是用最简单的方法解决问题!不要为了用它而去用它!

可以在db操作里用原生态sql。这个只是一个简单的关联查询。
laravel对多表关联查询的语法可以查一下。

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