我有一个具有一对多关系的laravel模型,用户可以通过多个选择标签对其进行编辑。
在将模型导出为JSON之前,我使用“ pluck”方法获取相关ID的数组而不是模型的数组,以便可以在select标记中使用它们,然后再与“同步”方法。
但是,“ pluck()”的结果似乎在序列化中并不持久。以下代码不起作用-序列化后,“关系”再次变为对象数组-
$model->relationship = $model->relationship->pluck('id');
但是,这是应该做的:somePropertyIHaveJustCameUpWith是一个ID数组
$model->somePropertyIHaveJustCameUpWith = $model->relationship->pluck('id');
1)为什么会发生这种情况?
2)我已经看到文档中有this resources way,但是为可以用单行代码解决的问题创建一个全新的类感觉有点过头了。没有更清洁的方法吗?
答案 0 :(得分:1)
我认为这很可能是模型实现toArray()的方式的结果。
您可以跟踪所采取的步骤,但是最终从模型的$this->relations
属性而不是从每个单独的关系中读取关系。
因此,与其像这样直接设置关系的值,要么:
$model->relationship = $newValue
...您可以尝试使用以下方法进行设置:
$model->setRelation('relationship',$newValue)
这将更新$model->relations
属性。
这应该允许toArray()
方法获得序列化时设置的新值。
请注意,toJson()
方法在序列化时依次调用toArray()
方法。因此,任何一种方法都会得到相同的结果。