Laravel updateOrCreate函数不更新自定义时间戳
我正在使用updateOrCreate函数创建新行,或者根据给定的值更新exists。但当我尝试更新定义为时间戳的值(不是默认的“created_at”或“updated_at”)时,它不会更新该值 只有当我使用updateOrCreate函数并且只有当要更新的唯一字段是timestamp字段时,才会出现这个问题。(在我的例子中是“最后一次扫描”)。 例如,当我将“status”更改为0时,数据库中更新的所有值都包括“last_scan”字段 我想验证每次运行此函数时,上次扫描是否会更新到函数运行时,无论是否有数据要更新Laravel updateOrCreate函数不更新自定义时间戳,laravel,laravel-5,eloquent,Laravel,Laravel 5,Eloquent,我正在使用updateOrCreate函数创建新行,或者根据给定的值更新exists。但当我尝试更新定义为时间戳的值(不是默认的“created_at”或“updated_at”)时,它不会更新该值 只有当我使用updateOrCreate函数并且只有当要更新的唯一字段是timestamp字段时,才会出现这个问题。(在我的例子中是“最后一次扫描”)。 例如,当我将“status”更改为0时,数据库中更新的所有值都包括“last_scan”字段 我想验证每次运行此函数时,上次扫描是否会更新到函数运
$categoryEntity = CategoryEntity::updateOrCreate(
[
'store_id' => $this->store_id,
'remote_id' => $collection->id
],
[
'remote_parent_id' => 0,
'name' => $collection->title,
'status' => 1,
'last_scan' => Carbon::now()
]
);
我尝试用常规更新方法替换更新和创建,如下所示,效果非常好:
$categoryEntity->last_scan = Carbon::now();
$categoryEntity->save();
我的迁移文件如下所示:
Schema::create('categories_entities', function (Blueprint $table) {
$table->increments('id');
$table->integer('store_id');
$table->integer('remote_id');
$table->integer('remote_parent_id');
$table->string('name');
$table->integer('status');
$table->timestamp('last_scan');
$table->timestamps();
});
在类别实体模型文件中,添加以下属性:
/**
* The attributes that should be mutated to dates.
*
* @var array
*/
protected $dates = [
'last_scan',
];
它适用于您吗?在类别实体模型文件中,添加以下属性:
/**
* The attributes that should be mutated to dates.
*
* @var array
*/
protected $dates = [
'last_scan',
];
它对你有用吗?TL;博士
模型中的“protected$fillable”属性不包含“last_scan”字段
更深
经过一点搜索,我注意到createOrUpdate方法使用了批量更新功能。
$fillable属性必须包含我们希望提供批量更改选项的所有字段
我再次查看该模型,发现其中受保护的$filleble属性包含除“last_scan”之外的所有字段
是:
现在:
TL;博士
模型中的“protected$fillable”属性不包含“last_scan”字段
更深
经过一点搜索,我注意到createOrUpdate方法使用了批量更新功能。
$fillable属性必须包含我们希望提供批量更改选项的所有字段
我再次查看该模型,发现其中受保护的$filleble属性包含除“last_scan”之外的所有字段
是:
现在:
你在使用哪个版本的laravel?我的laravel是v5.7你在使用哪个版本的laravel?我的laravel是v5.7这是什么意思<代码>受保护的$dates=['上次扫描',]代码>该字段已存在,正在进行更新!这基本上意味着它应该变异为一个日期。你有没有尝试过我的建议,但仍然不起作用?我不是发问者:)这不是问题所在,但请给我另一个观点。我再次检查了模型,发现它与受保护的$fillable数组相关。我有所有的字段,除了“上次扫描”,这就是他是唯一没有更新的字段的原因。$dates帮助我解决了与此模型无关的其他问题:)谢谢这是什么意思<代码>受保护的$dates=['上次扫描',]代码>该字段已存在,正在进行更新!这基本上意味着它应该变异为一个日期。你有没有尝试过我的建议,但仍然不起作用?我不是发问者:)这不是问题所在,但请给我另一个观点。我再次检查了模型,发现它与受保护的$fillable数组相关。我有所有的字段,除了“上次扫描”,这就是他是唯一没有更新的字段的原因。$dates帮助我解决了与此模型无关的其他问题:)谢谢
protected $fillable = ['store_id', 'remote_id', 'remote_parent_id', 'name', 'status', 'last_scan'];