Laravel Eloquent updateOrCreate с использованием предварительно заполненной модели - PullRequest
0 голосов
/ 07 сентября 2018

Во всем коде я заполняю красноречивую модель, получая данные от вызовов API. После заполнения модели я сохраняю ее, но есть вероятность, что она может существовать в базе данных (основной идентификатор).

Кажется глупым заполнять модель так:

$lead = new Lead;
$lead->id = '123';
$lead->name = 'Tom';
$lead->address = '121 main st';

Затем нужно сделать это, чтобы использовать updateOrCreate:

    $lead = Lead::updateOrCreate(
        ['id' => $lead->id],
        [
          'name ' => $lead->name,
          'address ' => $lead->address,
        ]
    );

Я также пробовал:

$lead = new Lead;
$lead = Lead::find($place);
$lead->id = '123';
$lead->name = 'Tom';
$lead->address = '121 main st';
$lead->save();

Но, конечно, это не работает, потому что если лидерства не существует, вы получаете нулевой объект и не можете создать объект по умолчанию из пустого значения.

Ответы [ 3 ]

0 голосов
/ 07 сентября 2018

Вы можете сначала попытаться получить объект:

$lead = Lead::find($place);

if( is_null($lead) ) {
  $lead = new Lead;
}

$lead->name = 'Tom';
$lead->address = '121 main st';

$lead->save();

$lead->save() здесь будет работать для новых и существующих объектов.

ПРИМЕЧАНИЕ: id следует динамически добавлять в случае нового Lead.

0 голосов
/ 07 сентября 2018

Так что решение Айнбера будет работать нормально, но ваша логика мне кажется странной. Какой смысл заполнять новую модель до запуска updateOrCreate?

Просто используйте updateOrCreate с данными запроса:

$lead = Lead::updateOrCreate(
    ['id' => '123'],
    [
      'name ' => 'Tom',
      'address ' => '121 main st',
    ]
);
0 голосов
/ 07 сентября 2018

Во втором коде вы перезаписываете $lead. То, что вы хотите, это firstOrNew()

$lead = Lead::firstOrNew(123);
$lead->name = 'Tom';
$lead->address = '121 main st';
$lead->save();

Вы также можете попробовать этот метод:

if(!$lead = Lead::find(123)) {
   $lead = new Lead();
   $lead->id = 123;
}
$lead->name = 'Tom';
$lead->address = '121 main st';
$lead->save();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...