Laravel Left Join 条件为 ON

Posted

技术标签:

【中文标题】Laravel Left Join 条件为 ON【英文标题】:Laravel Left Join with ON condition 【发布时间】:2021-09-13 09:45:50 【问题描述】:

我正在将我的查询转换为 Laravel 查询生成器。

" LEFT JOIN grade_level AS f ON (a.customer_type = 1 AND (e.id IS NULL AND d.grade_level_id = f.grade_level_id) OR (e.id IS NOT NULL AND e.grade_level_id = f.grade_level_id) ) "

我在查询过程中遇到了 AND 和 OR 条件问题。

->leftJoin("grade_level", function ($join) 
  $join->on("transaction_db.customer_type" , "=", 1);   
  $join->on("enrollment.id", "=", "");
  $join->on("student.grade_level_id", "=","grade_level.grade_level_id");
  $join->orOn("enrollment.id", "=" "", "enrollment.grade_level_id", "=", "grade_level.grade_level_id");
) 

【问题讨论】:

你到底有什么问题?你已经尝试过什么? @shaedrich 我编辑了我的问题,谢谢 【参考方案1】:

如果没有其他方法,您仍然可以执行以下操作:

->leftJoin("grade_level", function ($join) 
  $join->on(DB::raw("(a.customer_type = 1 AND (e.id IS NULL AND d.grade_level_id = f.grade_level_id) OR (e.id IS NOT NULL AND e.grade_level_id = f.grade_level_id) )");
) 

【讨论】:

嗯...无法解决我的问题,但无论如何,谢谢你的兄弟【参考方案2】:

我只想分享我们在这里解决了我们的问题。

$transactions->where(function($query) use ($glid) 
         $query->where(DB::raw("transaction_db.customer_type"), "!=", 1)
               ->orWhere(function($query1) use ($glid) 
                $query1->where(DB::raw("transaction_db.customer_type"), 1)
                       ->where("enrollment.grade_level_id", "=", $glid);
         );
);

【讨论】:

以上是关于Laravel Left Join 条件为 ON的主要内容,如果未能解决你的问题,请参考以下文章

left join 和 on 的区别

Oracle的left join中on和where的区别

SQL——左连接(Left join)右连接(Right join)内连接(Inner join)

SQL中join和left join的区别

Laravel Eloquent LEFT JOIN WHERE NULL

c# Linq left join 多个条件连接查询