Laravel 5.7.13 - FirstOrCreate / FirstOrNew не хранит значение - PullRequest
0 голосов
/ 19 февраля 2019

Я пытаюсь обновить таблицу с двумя столбцами 'id' и 'comp_id'.Я только хочу, чтобы 'comp_id' существовал в таблице один раз, поэтому я использую firstOrCreate, чтобы сделать это.

Этот вызов создает запись в таблице, потому что автоинкремент id продолжает увеличиваться каждый разЯ пытаюсь это сделать, но значение comp_id не сохраняется.

$connections = $connectionTable->where('base_id', $baseId)->get();
$noMatchTable = new noMatch;
foreach($connections as $connection){
 $rec = $noMatchTable->setTable($comparisonId.'_no_match')->firstOrCreate(['comp_id' => $connection->comp_id]);
}

Я также пытался.

 $rec = $noMatchTable->setTable($comparisonId.'_no_match')->firstOrNew(['comp_id' => $connection->comp_id])->save();

В обоих случаях $ rec-> id показывает новый идентификатор.

Заполнение для модели установлено правильно

  #fillable: array:1 [
    0 => "comp_id"
  ]

Какую ужасно простую вещь мне не хватает?

1 Ответ

0 голосов
/ 19 февраля 2019

Я прочитал об этом, и похоже, что updateOrCreate() в Builder.php вызывает firstOrNew() в том же файле.Если вы посмотрите на firstOrNew(), он вернет новый экземпляр модели, что означает, что ваш setTable() не будет работать, так как новый экземпляр будет содержать имя таблицы по умолчанию.Мне нравится решение, опубликованное здесь

Обновление имени таблицы во время выполнения не работает - laravel Eloquent ORM

К сожалению, нет способа динамически установить имя таблицы и использовать updateOrCreate()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...