Я создал систему обмена сообщениями для проекта, над которым я работаю, и, похоже, немного ударил камень преткновения.Laravel Eloquent отношения запросов
я следующие структуры таблицы (irrelevent столбцов опущены для ясности)
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). –