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】:
使用saved
或updated
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 中自定义时间戳字段的时间戳