问答 / 0 / 15 / 创建于 8年前
一对多有,但如果评论是多态关联,那model如何设置呢?
model
文档 更新父级时间戳
@lym125 看清楚问题,是多态关联!
都是一样的
同问,morphToMany关联怎么更新时间戳
@UpGod @伯洛芒果汁 用commentable属性获取父级,再用touch方法更新时间戳,http://implode.io/GSejzH
commentable
touch
@warmlight morphToMany是多对多,中间表没有model。 两个主表不存在父级子级吧? sync更新的
$arr = $model->terms()->sync(array_filter($input['terms'])); if(array_filter($arr)){ $model->touch(); } 原始写法了,看了下代码。laravel好像不支持更改中间表的自动识别两个主表是否有时间戳字段并更新。 只是在同步的时候,判断分别判断两个主表是否有touch并更新。 就是上面的写法可以改为在 term 模型中添加touchs属性。 这样中间表更新的时候就可以自动更新了,但是这样的话。 更改term表内容的时候,同样会自动更新。 看自己的取舍了。
@伯洛芒果汁 @warmlight touch() 方法是做什么用的?
@warmlight 那个代码,为什么不直接$post->touch()?
$post->touch()
@UpGod 逻辑判断,关联数据相比旧的是否有改变。
touch就是更新时间戳
可以在需要更新时间戳模型的另外一个模型中添加 $touchs=[], 里面内容为需要更新模型类名的复数,小驼峰形式, 这样同步操作关联关系就会自动更新相对的父级模型时间戳。
$touchs=[]
@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。 使用可变变量去操作,所以和什么形式无关,只需要保持 $touches 中关联名和模型中定义的关联方法名一致。
@伯洛芒果汁 在 save() 中传入 ['touch' => false] 即可。
。。。。
我要举报该,理由是:
文档 更新父级时间戳
@lym125 看清楚问题,是多态关联!
都是一样的
同问,morphToMany关联怎么更新时间戳
@UpGod @伯洛芒果汁
用
commentable属性获取父级,再用touch方法更新时间戳,http://implode.io/GSejzH@warmlight morphToMany是多对多,中间表没有model。 两个主表不存在父级子级吧? sync更新的
$arr = $model->terms()->sync(array_filter($input['terms']));
if(array_filter($arr)){
$model->touch();
}
原始写法了,看了下代码。laravel好像不支持更改中间表的自动识别两个主表是否有时间戳字段并更新。
只是在同步的时候,判断分别判断两个主表是否有touch并更新。
就是上面的写法可以改为在 term 模型中添加touchs属性。 这样中间表更新的时候就可以自动更新了,但是这样的话。 更改term表内容的时候,同样会自动更新。 看自己的取舍了。
@伯洛芒果汁 @warmlight touch() 方法是做什么用的?
@warmlight 那个代码,为什么不直接
$post->touch()?@UpGod 逻辑判断,关联数据相比旧的是否有改变。
touch就是更新时间戳
可以在需要更新时间戳模型的另外一个模型中添加
$touchs=[],里面内容为需要更新模型类名的复数,小驼峰形式,
这样同步操作关联关系就会自动更新相对的父级模型时间戳。
@superSnail $touches 数组中包含的是自定义的需要被更新的父级模型关联。
Illuminate\Database\Eloquent\Model.php 中 finishSave()方法。当数据有变,默认进行 touch。

使用可变变量去操作,所以和什么形式无关,只需要保持 $touches 中关联名和模型中定义的关联方法名一致。
@伯洛芒果汁 在 save() 中传入 ['touch' => false] 即可。
。。。。