【问题标题】:Laravel 5 > touch pivot table (Many-to-Many)Laravel 5 > 触摸数据透视表(多对多)
【发布时间】:2016-02-06 16:08:29
【问题描述】:

为什么我的 数据透视表 中的 updated_at 字段没有更新以提供以下设置?

型号

class Conversation extends Model {

    public function users()
    {
       return $this->belongsToMany('App\User')->withTimestamps();
    }
}

控制器

$conversation = Conversation::find($id);
$conversation->users()->touch();

最后一行应该 - 据我了解整个事情 - 也更新数据透视表 updated_at 字段,不是吗?

但事实并非如此。现在我必须通过数据库查询手动完成。

【问题讨论】:

  • 这有什么作用吗?你有错误吗?
  • 它在忽略数据透视表的同时触及用户 updated_at 字段。没有错误。
  • 如果您将->withPivot() 添加到您的users() 函数中,然后尝试$conversation->users()->pivot->touch();,它有什么作用吗?还是完全出错了?
  • 好的。我正在尝试在没有数据库的情况下对此进行测试,所以这都是理论上的哈哈...尝试$users = $conversation->users()->get();,然后遍历这些用户并访问他们的pivot 属性:foreach($users AS $user){ $user->pivot->touch(); } 你也许可以做到这一点,或者您可能必须设置每个 pivot->updated_at = date("Y-m-d"); 或您想要的任何格式。让我知道这些是否有效。
  • 好吧,这很可悲,但你帮助我更好地理解了访问枢轴模型。由于查询量的原因,我现在坚持使用 DB 类,直到找到更多“优雅的 laravel 开箱即用解决方案”:-) 谢谢 Tim Lewis。

标签: laravel-5 pivot-table


【解决方案1】:

我认为最好的方法是:

$conversation->users()->updateExistingPivot(
    $conversation->users()->get(),
    ['updated_at' => date('Y-m-d H:i:s')]
);

它对我有用(Laravel 5.7)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-11
    • 1970-01-01
    • 2019-02-27
    • 1970-01-01
    • 2023-02-05
    • 1970-01-01
    • 2014-12-13
    • 2019-03-25
    相关资源
    最近更新 更多