【问题标题】:Mutator is not working with bulk insertationMutator 不适用于批量插入
【发布时间】:2016-07-18 07:09:46
【问题描述】:

我正在尝试使用 Order::insert($orderArray); 在 laravel 中插入多条记录 我制作了一个

public function setOrderDetailAttribute($value)
{
    if ($value)
    {
        $this->attributes['order_detail'] = serialize($value);
    }
}

mutator 不工作。但是当我使用Order::create($orderArray[0][0]); 插入单个记录时,mutator 工作正常。我的问题是如何将 mutator 与插入函数或批量插入一起使用。

【问题讨论】:

  • 太伤心了,我没有得到答案。

标签: php mysql laravel eloquent mutators


【解决方案1】:

当你调用 Order::insert($orderArray); 时,它实际上并没有触及 Eloquent。 它只是代理对 Query\Builder@insert() 方法的调用。

所以我认为不能以这种方式使用 mutator。

【讨论】:

  • 那么我如何使用 mutator 进行批量插入?请有任何建议。我可以不使用 forloop 来做到这一点
  • insert 是 Query\Builer 类的方法,它保存原始数据。所以我认为我们不能在这里使用 with mutator 。您需要在插入之前格式化数据。
  • @UmarAkbar 您可以覆盖insert() 方法以通过突变器过滤您的值。一种选择是使用new Order 创建Order 实例,然后使用fill() 方法传递数据并使用toArray() 将其取回。如果你不想让你的访问者干扰,你可以玩$this->attributes,看看你能做什么。
【解决方案2】:

正如@Chung 所指出的那样,使用 insert() 进行大规模更新将“只是代理对 Query\Builder@insert() 方法的调用”,这不是将记录保存到 DB 的“纯 Eloquent”方式。

你需要做的是:

foreach( $orderArray as $item ) {
     Order::create($item);
}

【讨论】:

    猜你喜欢
    • 2013-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-23
    相关资源
    最近更新 更多