我对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值来确保在所有关系中都无法删除。
我需要确保我的发现是正确的,触摸不能删除
答案 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中的关系。