Reputation: 456
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
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