私が取り組んでいるプロジェクトのためのメッセージングシステムを作成しましたが、ちょっとした障害に遭ったようです。Laravel Eloquent querying relationships
は私が
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();
を次これは、ユーザーに現在ログインに送信されたメッセージを取得する場所送信者グループのアクセスレベルでは、ユーザーはメッセージを(理論的に)書くことができますが、ユーザーに送信されたすべてのメッセージを返すだけです。
Iはまた、具体的にグループ(グループ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'アクセス許可が含まれているかどうかを確認する必要があり、' :: 'メインモデル、ただ熱心なモデルです。 –