当我使用upsert函数时,我想得到插入和更新的行,我应该怎么做?
任何想法对我来说都很重要。非常感谢!
我使用MySQL。
下面是我的示例代码:
Flight::upsert([
['departure' => 'Oakland', 'destination' => 'San Diego', 'price' => 99],
['departure' => 'Chicago', 'destination' => 'New York', 'price' => 150]
], ['departure', 'destination'], ['price']);
我试过很多方法,但都不管用。
$dtbClass->upsert($this->items->toArray(), ['JAN'], $this->headings);
// Get records after upsert
$result = $dtbClass->whereIn('JAN', $this->janList)->get();
$classIds = $result->pluck('id')->toArray();
// check any class was created
$checkCreatedClass = false;
$checkUpdatedClass = false;
foreach ($result as $class) {
if ($checkCreatedClass && $checkUpdatedClass) {
break;
}
if ($class->wasRecentlyCreated) {
$checkCreatedClass = true;
} elseif ($class->wasChanged()) {
$checkUpdatedClass = true;
}
}
1条答案
按热度按时间ycl3bljg1#
看起来Laravel不能返回受
upsert()
方法影响的行,但你可以在更新/插入的项目中添加一些标志。例如,updated_at
列。类似于这样:注意:MySQL需要在第二个参数中使用的所有列上的唯一索引,以唯一地标识表中的记录。因此,您需要创建一个包含所有列('departure','destination','updated_at'在我的示例中)的复合唯一索引。
在我看来,这并不是解决问题的唯一方法,我只是把它作为例子之一,希望我能帮助你或给你正确的想法,祝你好运。