间接修改重载元素没有效果
Indirect modification of overloaded element has no effect
我有以下 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] = [];
您可能需要根据自己的需要对其进行调整,但您明白了。
我有以下 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] = [];
您可能需要根据自己的需要对其进行调整,但您明白了。