Sports Racer
Sports Racer

Reputation: 456

Laravel 5.7.13 - FirstOrCreate/FirstOrNew not storing value

I'm trying to update a table with two columns 'id' and 'comp_id'. I only want 'comp_id' to exist in the table one time, so I'm using firstOrCreate to do this.

This call is creating a record in the table because the id auto-increment keeps going up every time I try this, but the comp_id value is not being saved.

$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]);
}

I've also tried.

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

In both cases $rec->id shows a new id.

Fillable for the model is set correctly

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

What frightfully simple thing am I missing?

Upvotes: 1

Views: 805

Answers (1)

N Mahurin
N Mahurin

Reputation: 1446

I did some reading on this, and it seems like updateOrCreate() in Builder.php calls firstOrNew()in the same file. If you look at firstOrNew() it will return a new model instance, which means your setTable() will not work as the new instance will contain the default table name. I like the solution posted here

Update the table name at runtime not working - laravel Eloquent ORM

Sadly there is no way to dynamically set a table name and use updateOrCreate()

Upvotes: 2

Related Questions