如果某种条件下表中已有记录,我正在使用updateOrCreate()
函数来更新记录。但是,我不想更新包含唯一值的列之一。
我想对此列执行相同的操作,例如created_at
正在工作
创建记录值时会将其添加到created_at
列中,而在更新时将包含该值。
为防止出现此问题,我从模型中的$fillable
中删除了该列名。但是,在这种情况下,它不会向此列添加任何值。
protected $fillable = ['uid', 'channel', 'updated_at'];
$data = [
'uid' => Helper::generateUid(),
'channel' => $info['channel'],
'created_at' => time(),
'updated_at' => time(),
];
$cond = ['channel' => $info['channel']];
$isAdded = Templates::updateOrCreate($cond, $data);
预期结果 如果已有详细信息,我不想更新uid列。
实际结果 如果没有详细信息,它将为uid列和其他列增加值,如果有详细信息,那么它将更新uid列。
答案 0 :(得分:1)
您无法使用updateOrCreate
方法来做到这一点。您需要更加明确。您可以使用firstOrNew
方法来检索或实例化新对象。然后,您可以使用exists
属性来确定它是现有对象还是新对象。
$template = Templates::firstOrNew(['channel' => $info['channel']]);
if (!$template->exists) {
$template->uid = Helper::generateUid();
}
$template->save();
我省略了created_at
和updated_at
字段,因为它们是由Laravel自动处理的。