【问题标题】:Updating multiple Eloquent models with different values使用不同的值更新多个 Eloquent 模型
【发布时间】:2023-03-03 13:58:01
【问题描述】:

我有一个 Parent 模型与 hasMany 关系到 Child 模型。我想用特定和不同的值更新每个孩子的单个属性。我该怎么做?

我知道我可以使用批量赋值来更新具有相同值的每个孩子的属性,即

Parent::findOrFail($id)->children()->update(["property"=>"new value"])

但是如何使用单独设置的值来做到这一点? 例如如果我的父母有 4 个孩子,我想用这样的东西来设置它

Parent::findOrFail($id)->children()->update(["property"=>[1,2,3,4]])

然后孩子一有 1,孩子二有 2 等等。

【问题讨论】:

  • update 方法更新现有数据。在你的情况下,你有新的价值吗?然后你需要创建,或者使用updateOrCreate 方法。但不幸的是,5.7 上没有任何updateOrCreateMany 方法。在 8.x 上,您可以使用 upserts 方法更新批量查询
  • 循环 children() 并逐个更新,或附加到更新 SQL 语句。如果需要,您可以使用循环索引; foreach(...->children() as $index => child){ $child->update(['property' => $index]); },等等等等。
  • 有很多方法可以做到这一点; children 集合上的循环是最简单的。你试过什么?

标签: php laravel eloquent-relationship


【解决方案1】:

这样的事情应该可以工作,循环关系集合:

$values = [1, 2, 3, 4];
$parent
    ->children
    ->each(fn ($child, $k) => $child->update(["property" => $values[$k] ?? null]));

或者,如果您使用的是不受支持的旧版 PHP:

$values = [1, 2, 3, 4];
$parent->children->each(function ($child, $k) use ($values) {
    $child->update(["property" => $values[$k] ?? null]);
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-20
    • 1970-01-01
    • 2013-01-30
    • 2015-07-29
    • 2014-04-21
    • 1970-01-01
    相关资源
    最近更新 更多