我为我正在开发的一个项目创建了一个消息传递系统,似乎遇到了一些绊脚石。Laravel雄辩的查询关系
我有以下的表结构(为清楚起见省略无关紧要列)
messages
-------------------------
from_id to_id spam
users
-------------------------
id group_id
groups
-------------------------
id access_level
访问级别使用按位权限
001 read
010 write
100 delete
所以读写,访问级别将是“3 '
用户可以通过网站管理员撤消权限,所以我想要做的是选择已发送给发件人仍在发件人的邮件有写权限。
我的模型设置为
class User extends Eloquent {
public function group() {
return $this->belongsTo('Group');
}
}
class Message extends Eloquent {
public function to() {
return $this->belongsTo('User', 'to_id');
}
public function from() {
return $this->belongsTo('User', 'from_id');
}
}
我已经试过这样的(再次显示只有相关的部分)以下
Message::with(['from' => function($query)
{
$query->with(['group' => function($_query)
{
$_query->where('access_level', '&', 2);
}]);
}])
->where('to_id', Auth::user()->id)
->get();
这被发送到当前登录的消息在用户在发件人组的访问级别仍然使用户能够撰写邮件(理论上),但它只是返回发送给用户的所有邮件。
我还试图特异性靶向基团(基团6和7被禁止和未经证实的帐户):
Message::with(['from' => function($query)
{
$query->whereNotIn('group_id', [6,7])
}])
->where('to_id', Auth::user()->id)
->get();
也所有消息返回给用户。
tl;dr
如何使用侃侃而谈,我会选择发送至发件人组具有写权限的用户的所有邮件?
edit
当然,::with
不会影响其被拉消息,因为它不仅会连接表的延迟加载。
问题是,不仅组2中的人员能够编写消息,所以我需要检查用户组权限是否包含'write'权限,并且':: with'不会影响主要模型,只是渴望(ly)加载模型。 –