繁体   English   中英

Laravel select 如果 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM