Laravel When 列上的条件

问题描述 投票:0回答:1

我有一个 ModelA,其中包含以下列:姓名、姓氏、电子邮件

我希望名为 Test 的 ModelA 在电子邮件上添加额外的位置

我尝试的是以下

$model_a_res = A::when(
function($query){
    return $query->where('name','Test');
},
function ($query) { 
    $query->where('email', 'NOT LIKE', '%@test%');})
->first();

我希望第二个位置仅在 A 上运行,列名称 = Test 然而,这不起作用。

我用用户名 Mike 和他的电子邮件地址 [电子邮件受保护] 进行了尝试,但他没有出现在结果中。

一些数据

id name email

1 Test [email protected] 
2 Test [email protected]
3 Mike [email protected]
4 Mike [email protected]

3 和 4 都应该在结果中 1 和 2 因为他们有 name = Test 将有另一个查询,该查询将检查他的电子邮件中是否有@test,如果有,他将不会被返回 返回的行是 2, 3, 4

php laravel laravel-5 eloquent
1个回答
0
投票

您不能为此使用

when()

$model_a_res = A::where(function ($query) {
    $query->where('name', '!=', 'Test')
          ->orWhere(function ($query) {
              $query->where('name', '=', 'Test')
                    ->where('email', 'NOT LIKE', '%@test%');
          });
})->get();

输出

1 Test [email protected]  -  will skipp
2 Test [email protected] - added
3 Mike [email protected]  - added
4 Mike [email protected]  - added
© www.soinside.com 2019 - 2024. All rights reserved.