多态关联如何更新父模型的时间戳?

一对多有,但如果评论是多态关联,那model如何设置呢?

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 15

文档 更新父级时间戳

1年前 评论

@lym125 看清楚问题,是多态关联!

1年前 评论

都是一样的

1年前 评论

同问,morphToMany关联怎么更新时间戳

1年前 评论

@UpGod @伯洛芒果汁
commentable属性获取父级,再用touch方法更新时间戳,http://implode.io/GSejzH

1年前 评论

@warmlight morphToMany是多对多,中间表没有model。 两个主表不存在父级子级吧? sync更新的

1年前 评论

$arr = $model->terms()->sync(array_filter($input['terms']));
if(array_filter($arr)){
$model->touch();
}
原始写法了,看了下代码。laravel好像不支持更改中间表的自动识别两个主表是否有时间戳字段并更新。
只是在同步的时候,判断分别判断两个主表是否有touch并更新。
就是上面的写法可以改为在 term 模型中添加touchs属性。 这样中间表更新的时候就可以自动更新了,但是这样的话。 更改term表内容的时候,同样会自动更新。 看自己的取舍了。

1年前 评论

@伯洛芒果汁 @warmlight touch() 方法是做什么用的?

1年前 评论

@warmlight 那个代码,为什么不直接$post->touch()?

1年前 评论

@UpGod 逻辑判断,关联数据相比旧的是否有改变。

1年前 评论

touch就是更新时间戳

1年前 评论

可以在需要更新时间戳模型的另外一个模型中添加 $touchs=[]
里面内容为需要更新模型类名的复数,小驼峰形式,
这样同步操作关联关系就会自动更新相对的父级模型时间戳。

6个月前 评论

@superSnail $touches 数组中包含的是自定义的需要被更新的父级模型关联。

protected function finishSave(array $options)
    {
        $this->fireModelEvent('saved', false);

        if ($this->isDirty() && ($options['touch'] ?? true)) {
            $this->touchOwners();
        }
        $this->syncOriginal();
    }

Illuminate\Database\Eloquent\Model.php 中 finishSave()方法。当数据有变,默认进行 touch。
file
使用可变变量去操作,所以和什么形式无关,只需要保持 $touches 中关联名和模型中定义的关联方法名一致。

4个月前 评论

@伯洛芒果汁 在 save() 中传入 ['touch' => false] 即可。

4个月前 评论
GalaxyNo_1

。。。。

1周前 评论

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!

社区文档:

将托管在 packagist.org 和 github.com 的扩展包使用国内 CDN 加速
GitHub Laravel 扩展包 TOP 250
速查表方便快速查询框架功能,支持手机访问,支持中英文版本
Laravel 中文文档,由社区用户翻译和维护,将会保持一直更新
此文档的目的,就是为了提高技术团队的凝聚力、一致性和生产效率。
开发环境的部署,开发者工具的选择,适用于 Mac 和 Windows。
浓缩过后的精华
Laravel Nova 后台管理面板文档的中文翻译
Lumen 中文文档,由社区用户翻译和维护,将会保持一直更新
Laravel 下知名扩展包 Dingo API 的中文文档,Laravel API 开发必知必会