Как добавить списки функций запроса laravel в updateOrCreate eloquent - PullRequest
0 голосов
/ 08 января 2019

Я пытаюсь использовать 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, который в настоящее время реализуется в ручном методе

1 Ответ

0 голосов
/ 08 января 2019

Вы можете просто добавить все атрибуты, которые вы хотите проверить, в массив, который вы передаете updateOrCreate

// these are your required conditions
$conditions = [
    'name_first' => $student['name_first'],
    'name_last' => $student['name_last'],
];

// these are optional
$attributes = [
    'phone_preferred', 
    'email_preferred', 
    'home_street_address_1', 
    'mailing_street_address_1', 
    'mailing_address_city'
];

foreach($attributes as $attr){
    // check to see if the attribute exists on the student
    // and is not empty
    if(isset($student[$attr]) && !empty($student[$attr])){
        $conditions[$attr] = $student[$attr];
    }
}

Student::updateOrCreate($conditions);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...