【问题标题】:Laravel $touch for updating updated_atLaravel $touch 用于更新 updated_at
【发布时间】:2019-06-13 06:59:18
【问题描述】:

我对 Laravel 中的 $touch 有疑问。我的理解是,$touch 可用于更新模型或关系,而无需更新任何其他列。但我正在尝试的是,我需要更新用户表,无论其他用户相关表中发生什么变化。 它可以被创建、更新或删除。在我的情况下,$touch 不使用删除关系。

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

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

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

这是我尝试过的。用户中的 updated_at 可以正常使用创建和更新。但不能删除。

是不是因为touch只适用于add和update?

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

我需要确保我的发现是真实的,触摸不适用于删除

【问题讨论】:

  • 你会写删除代码吗?

标签: php laravel laravel-5.7


【解决方案1】:

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

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

因此,删除无法对您要删除的行起作用。

但在父模型上它确实有效,例如,您在添加的评论模型中使用 cmets 发布:

protected $touches = [ 'post' ];

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

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

-- 编辑

改善您与其中之一的关系:

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

// or

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

【讨论】:

  • 但它现在在我的情况下工作。让我再检查一次。有没有不更新的可能?
  • @reshma 您应该编辑您的问题并显示一些代码,如果不查看您的代码,我无法回答它。因为你的发现不正确,它对删除不起作用,所以我向你展示了框架的实现。
  • @reshma 看看我的编辑。你的归属似乎不正确。您可以避免使用第二个参数,因为它与函数相同,因此 Laravel 无论如何都会使用 user_id
  • 我没有使用确切的格式。这就是我指定第二个参数的原因。而且我认为关系没有问题。因为它可以很好地创建和更新。
  • 是的,我做到了,而且效果很好。您应该显示确切的代码,以及您使用delete 的方式,因为我向您展示了确实调用所有者的触摸的源代码.. 所以它不可能不用于删除。
【解决方案2】:

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

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

【讨论】:

  • 欢迎您,我提供了帮助 :) 您可以接受我的回答,而不是提供您自己的回答,因为上面已经回答了。
  • 我刚刚提供了两种方法,因为我在评论部分。非常感谢您的宝贵时间
猜你喜欢
  • 2019-06-11
  • 1970-01-01
  • 2020-06-23
  • 2014-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-18
相关资源
最近更新 更多