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

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

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 15

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

6年前 评论

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

6年前 评论

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

6年前 评论

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

6年前 评论

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

6年前 评论

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

6年前 评论

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

6年前 评论

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

6年前 评论

touch就是更新时间戳

6年前 评论

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

5年前 评论

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

5年前 评论

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

5年前 评论
GalaxyNo_1

。。。。

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!