php - 间接修改重载元素没有效果

标签 php eloquent

我有以下 Eloquent 查询:

$item = Item::where('sku', $sku)->first();

在收到此查询后,我将手动添加各种元素,例如:

$item['total'] = $item['subtotal'] + $this->currentInventory();

像上面这样修改对象的语句工作得很好。

当我执行以下操作时它停止工作:

$item['fields'] = [];

$fields = DB::table('item_fields')->where('item_id', $item['id'])->get();

foreach ($fields as $f) {
    if (!isset($item['fields'][$f->field_group_name]))
         $item['fields'][$f->field_group_name] = [];

    $item['fields'][$f->field_group_name]['valid_values'] = DB::table('item_field_valid_values')->where('item_field_id', $f->item_field_id);
}

这将导致行 $item['fields'][$f->field_group_name] = []; 产生错误:

Indirect modification of overloaded element of Item has no effect

我怎么能分配 $item['fields'] = [] 但当我尝试将实际元素添加到 $item['fields'] 我得到这个错误的数组?

PHP 版本 5.6.0。

最佳答案

首先,您的代码中缺少 get(),因此:

1 您正在遍历 Query\Builder 而不是结果数组,因为您从未执行过查询。 (我想你只是在这里忘了它,否则你可能会trying to get property of non-object)

2 其中一行在 field_group_name 列中具有 ''null 值。

这就是您的代码执行此操作的原因:

$item['fields'][NULL] = [];

这会导致 Indirect modification ... 错误。

所以首先添加空值检查:

if ($f->field_group_name && ! isset($item['fields'][$f->field_group_name]))
     $item['fields'][$f->field_group_name] = [];

您可能需要根据需要对其进行调整,但您明白了。

关于php - 间接修改重载元素没有效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27853928/

相关文章:

php - 如何从图像结果列表中选择一张图像?

php - 用 Eloquent 显示对象

laravel-4 - Eloquent Raw where 使用类似条件查询

php - codeigniter 表单回调值

PHP 邮件功能有时会起作用

php - MySQL 嵌套 CASE 错误我需要帮助吗?

php - 如何获取亚马逊MWS所有产品的列表

php - 如何使用mysql确保php中的编号顺序唯一?

php - Laravel 否定局部作用域

php - 如何在 laravel 5 中模拟模型上的 create 方法?