Laravel $ touch用于更新updated_at

时间:2019-06-13 06:59:18

标签: php laravel laravel-5.7

我对Laravel中的$touch有疑问。据我了解,$touch可用于更新模型或关系,而无需更新任何其他列。但是我正在尝试的是,无论其他用户相关表中发生了什么更改,我都需要更新用户表。 可以创建,更新或删除。就我而言,$touch无法使用删除关系。

//touch
protected $touches = ['somerelation'];

//relationship
public function somerelation(){
    return $this->belongsTo('someModel', 'key_id');
}

public setSomeRelationAttribute(){
  $this->someRelation()->delete();
}

这是我尝试过的。用户在使用create和update时工作得很好。但是不能删除。

是因为触摸仅适用于添加和更新?

我通过检查DB值来确保在所有关系中都无法删除。

我需要确保我的发现是正确的,触摸不能删除

2 个答案:

答案 0 :(得分:1)

例如,如果要在现有模型上调用touch()

$post = Post::find(1);
$post->touch(); // this updates just this model

因此,删除无法在要删除的行上进行。

但是在父模型上它确实起作用,例如,您在带有Comment的模型中添加了注释:

protected $touches = [ 'post' ];

public function post()
{
    return $this->belongsTo(Post::class);
}

即使您删除评论,也会更新该帖子。 Here是delete方法的实现,特别是将触及父模型的那一行。

-编辑

改善与以下其中一种的关系:

return $this->belongsTo('App\User');

// or

return $this->belongsTo(User::class);

答案 1 :(得分:0)

对于$ {touch}中的delete() method in Eloquent Model关系将被更新。

如果调用delete() in query-builder,它将不会触摸$ touch中的关系。