我爲我正在開發的一個項目創建了一個消息傳遞系統,似乎遇到了一些絆腳石。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)加載模型。 –