我结识了Laravel和Eloquent,它非常强大。但我似乎无法弄清楚以下情况。这是我的数据库结构:
Companies--Projects--Blocks<-user_block->Users
So a company hasMany Projects
Project belongsTo a Company
A Project hasMany Blocks
A Block belongsTo a Project
Users belongsToMany Blocks
Blocks belongsToMany Users
(使用数据透视表的用户和块之间的多对多)。
我想提取属于项目的所有用户。我没有问题,所有用户都是一个块,但要在一个级别上升 - 我怎么能这样做?
在我的MessageController中,我正在执行以下操作:
$users = User::with('blocks')
->where('company_id','=',3)
->orderBy('lastname','asc')
->get();
不知何故,我想将项目ID传递给我的查询,并仅检索属于该项目的任何块中的用户(然后我用它来发送消息)。
答案 0 :(得分:0)
我相信我找到了答案:
$users = User::select('users.id as user_id', 'users.email as email')
->distinct()
->join('user_block', 'users.id', '=', 'user_block.user_id')
->join('blocks', 'user_block.block_id', '=', 'blocks.id')
->where('blocks.project_id','=',$project_id)
->get();
我传递project_id来限制返回的记录。
我仍然可以访问刀片模板中的模型来调用一个函数来检查哪些用户已经上传了每个块的所有必需文档。