【问题标题】:Laravel collection: pluck before serializationLaravel 合集:序列化前的采摘
【发布时间】:2019-04-10 00:45:42
【问题描述】:

我有一个具有一对多关系的 laravel 模型,用户可以通过多选标签对其进行编辑。

在将模型导出为 JSON 之前,我使用“pluck”方法来获取相关 ID 的数组而不是模型数组,以便它们可以在 select 标签中使用,然后再次与“ Laravel 的同步方法。

但是,“pluck()”的结果似乎不会在序列化过程中持续存在。以下代码在序列化时不起作用,“关系”再次成为对象数组-

$model->relationship = $model->relationship->pluck('id');

然而,这个却做了它应该做的事情:somePropertyIHaveJustCameUpWith 是一个 ID 数组

$model->somePropertyIHaveJustCameUpWith = $model->relationship->pluck('id');

1) 为什么会这样?

2) 我在文档中看到了this resources way,但是为可以通过一行代码解决的问题创建一个全新的类感觉有点矫枉过正。没有更清洁的方法吗?

【问题讨论】:

  • 你能把这个 ->toArray() 转换成这个吗?

标签: php json laravel-5 eloquent


【解决方案1】:

我认为这可能是模型实现toArray() 方式的结果。

您可以跟踪所采取的步骤,但最终关系是从模型上的$this->relations 属性中读取的,而不是从每个单独的关系中读取的。

所以,不要像这样直接设置关系的值:

$model->relationship = $newValue

...您可以尝试使用以下方法设置它:

$model->setRelation('relationship',$newValue)

这将更新$model->relations 属性。

这应该允许toArray() 方法获取您在序列化时设置的新值。

注意toJson()方法在序列化时会依次调用toArray()方法。所以任何一种方法都会得到相同的结果。

【讨论】:

    猜你喜欢
    • 2020-02-21
    • 1970-01-01
    • 2020-09-13
    • 2020-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多