Tôi đã tạo một hệ thống nhắn tin cho một dự án mà tôi đang làm việc và dường như đã đánh một chút trở ngại.Laravel Eloquent truy vấn các mối quan hệ
Tôi đã cấu trúc bảng sau (cột irrelevent bỏ qua cho rõ ràng)
messages
-------------------------
from_id to_id spam
users
-------------------------
id group_id
groups
-------------------------
id access_level
các cấp độ truy cập sử dụng quyền Bitwise
001 read
010 write
100 delete
như vậy để đọc và viết, mức độ truy cập sẽ là '3 '
người dùng có thể bị quản trị viên trang web thu hồi quyền, vì vậy điều tôi đang cố gắng làm là chọn thư đã được gửi tới người dùng nơi người gửi vẫn đang có quyền ghi.
mô hình của tôi được thiết lập như vậy (một lần nữa chỉ phần có liên quan cho thấy)
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');
}
}
Tôi đã thử những điều sau
Message::with(['from' => function($query)
{
$query->with(['group' => function($_query)
{
$_query->where('access_level', '&', 2);
}]);
}])
->where('to_id', Auth::user()->id)
->get();
này được các thông điệp gửi đến các hiện đang đăng nhập sử dụng nơi cấp độ truy cập của nhóm người gửi vẫn cho phép người dùng viết thư (theo lý thuyết) tuy nhiên nó chỉ đơn giản trả về tất cả các thư được gửi tới người dùng.
Tôi cũng đã cố gắng đặc biệt nhắm mục tiêu nhóm (nhóm 6 và 7 bị cấm và các tài khoản chưa được xác nhận):
Message::with(['from' => function($query)
{
$query->whereNotIn('group_id', [6,7])
}])
->where('to_id', Auth::user()->id)
->get();
mà cũng trả về tất cả các thông điệp cho người dùng.
tl;dr
thế nào, sử dụng hùng hồn, tôi sẽ chọn tất cả các tin nhắn được gửi cho một người dùng mà nhóm người gửi có quyền ghi?
edit
Tất nhiên, ::with
sẽ không ảnh hưởng đến các thông điệp đó được kéo, vì nó chỉ làm bốc lười biếng của các bảng tham gia.
Vấn đề là, không chỉ những người trong nhóm 2 mới có thể viết tin nhắn, vì vậy tôi cần kiểm tra xem quyền của nhóm người dùng có quyền 'write', và' :: with' không ảnh hưởng đến mô hình chính, chỉ là mô hình hời hợt (ly). –