Eloquent 使用 ifnull 和 orOn 的 ORM LeftJoin 不起作用

Eloquent ORM LeftJoin with ifnull and orOn using is not working

我想用 eloquent 或 laravel 8.

编写此 sql 查询
Select * from apples as a

Left Join Brands as b 

On ( (IFNULL(a.x, '') || IFNULL(a.y, '') || IFNULL(a.z, '')) =
                    (IFNULL(b.t, '') || IFNULL(b.e, '') || IFNULL(b.f, '')))

我的eloquent查询:

  Apple::select('*')
   ->leftJoin('Brands', function ($join) {
                $join->on('Brands.t', '=', 'Apples.x');

                $join->on(function ($join2) {
                    $join2
                        ->orOn('Brands .t', '=', 'Apples.x')
                        ->whereRaw("REPLACE('Brands .t',' ','')!=?", '')
                        ->whereRaw("REPLACE('Apples.x',' ','')!=?", '')
                        ->where("Apples.x","!=",null)
                        ->where("Brands .t","!=",null);
                    $join2
                        ->orOn('Brands .e', '=', 'Apples.y')
                        ->whereRaw("REPLACE('Brands .e',' ','')!=?", '')
                        ->whereRaw("REPLACE('Apples.y',' ','')!=?", '')
                        ->where("Apples.y","!=",null)
                        ->where("Brands .e","!=",null);
                });

            })

苹果专栏

x -> 字母数字

y-> 字母数字

z-> 字母数字

品牌专栏

t-> 字母数字

e-> 字母数字

f-> 字母数字

所有列的值都可以是 null 或像这样的空字符串 -> " " 没有。

每次匹配列 Apple x 和 Brand t。

例如数据库显示。任何列包含空白值或 null 或空字符串。

苹果

X Y Z
ABC 2
ABC 4
ABC
ABC 5 6

品牌

t e f g
ABC 2 null ABC_NL
ABC '' 4 ABC_TR
ABC null whitespace_string ABC_USA
ABC 5 6 ABC_GER

如何使用 laravel eloquent orm 查询访问真实的 g 结果?

我解决了这个问题。

->leftJoin('Apple', function ($join) {
                $join->on(
                    DB::raw("IFNULL(Apple.x, '') || IFNULL(Apple.y, '') || IFNULL(Apple.z, '')"),
                    DB::raw("IFNULL(Brand.t, '') || IFNULL(Brand.e, '') || IFNULL(Brand.f, '')")
                );
            })