У меня есть ModelA со столбцами: имя, фамилия, адрес электронной почты.
Я хочу, чтобы ModelA с именем Test добавила дополнительную информацию по электронной почте.
я попробовал следующее
$model_a_res = A::when(
function($query){
return $query->where('name','Test');
},
function ($query) {
$query->where('email', 'NOT LIKE', '%@test%');})
->first();
Я хочу, чтобы в эту секунду запускался только A с именем столбца = Test однако это не работает.
Я попробовал это с именем пользователя Майк и его адресом электронной почты [email protected], но он не появился в результате.
некоторые данные
id name email
1 Test [email protected]
2 Test [email protected]
3 Mike [email protected]
4 Mike [email protected]
в результатах должны быть и 3, и 4 1 и 2, поскольку у них есть имя = У Теста будет другой запрос, который проверит, есть ли у него @test в его электронной почте, если да, то он не будет возвращен возвращены строки 2, 3, 4
Расскажите нам, какие входы + что вы ожидаете на выходе.
Добавьте дополнительные запросы, дополнительные условия, если эта строка имеет имя столбца = Test
Это неполный вопрос. Добавьте к нему дополнительную информацию.
when()
выполняет замыкание только в том случае, если первый аргумент истинен. По этой логике ваш первый параметр не возвращает true. Но нам понадобится больше информации.
Для этого нельзя использовать 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
не могу понять, о чем ты спрашиваешь