Я пытаюсь использовать updateOrCreate с несколькими условиями, и это условие может иногда применяться, если доступны соответствующие данные. В настоящее время я делаю, как сначала найти идентификатор, если он существует, и если идентификатор существует, обновите еще, создайте вручную, но теперь я хочу использовать данную функцию updateOrCreate laravel.
$existing = Student::where('name_last', $student['name_last'])
->where('name_first', $student['name_first'])
->where(function($query) use ($student) {
if (array_key_exists('phone_preferred', $student) && !empty($student['phone_preferred'])) {
$query->where('phone_preferred', $student['phone_preferred']);
}
if (array_key_exists('email_preferred', $student) && !empty($student['email_preferred'])) {
$query->where('email_preferred', $student['email_preferred']);
}
if (array_key_exists('home_street_address_1', $student) && !empty($student['home_street_address_1'])) {
$query->where('home_street_address_1', $student['home_street_address_1']);
}
if (array_key_exists('mailing_street_address_1', $student) && !empty($student['mailing_street_address_1'])) {
$query->where('mailing_street_address_1', $student['mailing_street_address_1']);
}
if (array_key_exists('mailing_address_city', $student) && !empty($student['mailing_address_city'])) {
$query->where('mailing_address_city', $student['mailing_address_city']);
}
})->first();
if($existing){
try{
Student::where('id', $existing->id)
->update($student);
} catch (\Exception $e) {
$error_encountered = true;
$error_arr[] = $e->getMessage();
$error_row_numbers[] = $row_no;
}
}
Я хочу реализовать что-то вроде:
try{
Student::updateOrCreate(
['name_first' => $student['name_first], 'name_last' => $student['name_last]],
$student
); //I could not get how to implement other occasional where condition
} catch (\Exception $e) {
$error_encountered = true;
$error_arr[] = $e->getMessage();
$error_row_numbers[] = $row_no;
}
Я хочу включить те случайные, где функция запрашивает метод updateOrCreate, который в настоящее время реализуется в ручном методе