Laravel 手动更新时间戳返回 null

Posted

技术标签:

【中文标题】Laravel 手动更新时间戳返回 null【英文标题】:Laravel manually update timestamps returns null 【发布时间】:2018-07-09 02:08:38 【问题描述】:

我有一些孩子的提议。

我想在每个孩子的父 expire_time 字段更改时更新每个孩子的 expire_time 字段。

但它返回 null。

expire_time 类型是时间戳

这是我在模型中的代码:

if ($offer->childrenOffers->count()) 
        $offer->childrenOffers->each(function (self $childOffer) use($offer) 

            ddd($offer->expire_time); //returns "2018-02-30 23:59:59"
            ddd($childOffer->expire_time); //returns "2018-02-01 23:59:59"

            $childOffer->expire_time = $offer->expire_time;

            dd($childOffer->expire_time); //returns null

            $childOffer->save();
        );
    

我该怎么做?!

【问题讨论】:

$childOffer->expire_time 在您调用 save 之前不会更新 您的代码似乎没有问题 问题出在 expire_time 类型中,如果我将数据传递给它们,所有字段都会更改,除了这个字段@Sohel0415 有什么错误吗?? 不 :( @Sohel0415 【参考方案1】:

使用savedupdated Eloquent events。

每次更新模型时,都可以更新其子项。

【讨论】:

我尝试了所有这些但它不起作用:(问题不在于保存或更新......问题在于该字段类型。【参考方案2】:

expire_time添加到模型中的可填充字段并首先确保持久化到数据库然后检查

if ($offer->childrenOffers->count()) 

    $offer->childrenOffers->each(function (self $childOffer) use($offer) 
       $childOffer->expire_time = $offer->expire_time;     
       $childOffer->save();
       dd($childOffer->expire_time); //returns null    
    );

【讨论】:

它在可填写的字段中。如果我将数据传递给除此字段之外的所有字段!我真的不知道为什么:(【参考方案3】:

您可以使用Eloquent Event

Eloquent 模型触发多个事件,允许您连接到模型生命周期中的以下点:检索、创建、创建、更新、更新、保存、保存、删除、删除、恢复、恢复。每次在数据库中保存或更新特定模型类时,事件允许您轻松执行代码。

Offer 模型中,您可以添加一个引导方法,以便在保存或更新优惠时自动更新子项,如下所示:

public static function boot() 
    parent::boot();

    //When the offer is updated
    static::updated(function ($offer) 
        $offer->childrenOffers->each(function ($child) use ($offer)
            $child->expire_time = $offer->expire_time;
            $child->save();
        );
    );

【讨论】:

以上是关于Laravel 手动更新时间戳返回 null的主要内容,如果未能解决你的问题,请参考以下文章

使用 touch() 更新 laravel 中自定义时间戳字段的时间戳

更新而不触及时间戳(Laravel)

Laravel 的时间戳有奇怪的返回格式

laravel 雄辩的查询构建器更新自定义时间戳字段而没有任何逻辑

更新条目而不更新时间戳

Prometheus 时间戳返回 Null