![](/img/trans.png)
[英]Laravel query builder - Select all where another table has their ID
[英]Laravel select all rows if id exists in another table and a column has specific values on that table
我有 4 张桌子:
通知(id、title、desc、is_published)
notices_to_districts (id, notice_id, district_id)
notices_to_employees (id, notice_id, user_id)
notices_to_establishments(id,notice_id,information_id)
我想获得所有独特的通知,如果,
notices_to_districts 有一个特定的 district_id,或者
notices_to_employees 有一个特定的 user_id,或者
notices_to_establishments 有一个特定的establishment_id
我在尝试 -
$notices = Notice::join('notices_to_districts', 'notices_to_districts.notice_id', '=', 'notices.id')
->join('notices_to_establishments', 'notices_to_establishments.notice_id', '=', 'notices.id')
->join('notices_to_employees', 'notices_to_employees.notice_id', '=', 'notices.id')
->where('district_id', '=', $user_district_id)
->orWhere('establishment_id', '=', $user_establishment_id)
->orWhere('user_id', '=', $user_id)
->where('is_published', '=', 1)->get();
您应该使用闭包参数分组,否则您的“orWhere”将无法按您的意愿工作。
$notices = Notice::join('notices_to_districts', 'notices_to_districts.notice_id', '=', 'notices.id')
->join('notices_to_establishments', 'notices_to_establishments.notice_id', '=', 'notices.id')
->join('notices_to_employees', 'notices_to_employees.notice_id', '=', 'notices.id')
->where('district_id', '=', $user_district_id)
->where('is_published', '=', 1)
->where(
function ($query) use ($user_establishment_id, $user_id) {
$query->orWhere('establishment_id', '=', $user_establishment_id)
->orWhere('user_id', '=', $user_id);
}
)
->get();
像这个例子一样, SQL 将在您的子句周围有正确的括号。
I solved it -
$notice_ids_of_district = Notices_to_district::select('notice_id')->where('district_id', '=', $user_district_id)->get();
$notice_ids_of_establishment = Notices_to_establishment::select('notice_id')->where('establishment_id', '=', $user_establishment_id)->get();
$notice_ids_of_employee = Notices_to_employee::select('notice_id')->where('user_id', '=', $user_id)->get();
$notices = Notice::whereIn('id', $notice_ids_of_district)
->orWhereIn('id', $notice_ids_of_establishment)
->orWhereIn('id', $notice_ids_of_employee)
->get();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.