Laravel updateOrCreate函数不更新自定义时间戳

Laravel updateOrCreate函数不更新自定义时间戳,laravel,laravel-5,eloquent,Laravel,Laravel 5,Eloquent,我正在使用updateOrCreate函数创建新行,或者根据给定的值更新exists。但当我尝试更新定义为时间戳的值(不是默认的“created_at”或“updated_at”)时,它不会更新该值 只有当我使用updateOrCreate函数并且只有当要更新的唯一字段是timestamp字段时,才会出现这个问题。(在我的例子中是“最后一次扫描”)。 例如,当我将“status”更改为0时,数据库中更新的所有值都包括“last_scan”字段 我想验证每次运行此函数时,上次扫描是否会更新到函数运

我正在使用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'];