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, '')")
);
})
我想用 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, '')")
);
})