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

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

《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《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=[]
里面内容为需要更新模型类名的复数,小驼峰形式,
这样同步操作关联关系就会自动更新相对的父级模型时间戳。

8个月前 评论

@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 中关联名和模型中定义的关联方法名一致。

7个月前 评论

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

7个月前 评论
GalaxyNo_1

。。。。

3个月前 评论

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