【问题标题】:Laravel and Eloquent : Update multiple Model & RelationshipsLaravel 和 Eloquent:更新多个模型和关系
【发布时间】:2014-01-04 02:47:36
【问题描述】:

如何同时更新多个模型及其关系?

例如:

EditPost 是具有editor() 关系belongsTo User 模型的模型。

现在假设我必须用original_post_id 更新所有EditPost 对象中的编辑器

EditPost::where('original_post_id',4)->get()

可能的解决方案

一个。通过 ID 而不是模型用户引用用户来做到这一点

EditPost::where('original_post_id',4)->update(array('editor_id',3));

b.通过foreach 完成并保存每个模型

然而

这些都不吸引我,因为它们通常不符合 Eloquent 的对象概念,或者它们意味着进行多次更新而不是一次更新。 我想知道 Eloquent 本身是否有更优雅的解决方案

【问题讨论】:

  • 很抱歉,我真的不明白你的问题,你所说的硬编码 ID 是什么意思?您正在寻找模型之间的更新,以上内容不适合您吗?
  • 对不起。我的意思是在更新中使用 id 而不是对象。这是有效的。我只是好奇是否有更“雄辩”的方式。

标签: php laravel-4 eloquent


【解决方案1】:

您没有指定关联的另一端,但我假设您正在寻找这样的东西?:

$user = User::find(3)
EditPost::where('original_post_id', 4)->editor()->associate($user)->save();

【讨论】:

  • 谢谢。如果我有多个列要更新,这将如何工作?如果我运行单独的语句,它们会作为单独的查询运行吗?如果是这样,是否有一个语句可以更新多个帖子的多个列?
  • 为 EditPost 提供的模式有 belongsTo,这意味着您使用的是一对多关系,一对多与多对多不同(如果您指的是这种关系)。如果您指的是为多个用户更新多个单个帖子,则需要一个循环,遍历用户并将它们与必要的帖子相关联。
  • 不,我不是说我的意思是多列。例如,我必须在一个更新语句中更新user_idpost_approval_rating 我该怎么做? (雄辩)
  • 我相信(未经测试)这应该可以工作:EditPost::where('original_post_id', 4)->update(array('post_approval_rating'=>$some_value))->editor()->associate($user)->save();
猜你喜欢
  • 1970-01-01
  • 2023-03-27
  • 2013-12-09
  • 2016-02-26
  • 2013-11-22
  • 1970-01-01
  • 1970-01-01
  • 2017-05-07
  • 1970-01-01
相关资源
最近更新 更多