【问题标题】:How can I make laravel casting array on the model?如何在模型上制作 laravel 铸造数组?
【发布时间】:2018-01-10 11:33:36
【问题描述】:

我试试这样

数据库中votes_detail的数据类型为json

我的模型是这样的:

<?php
class Store extends Model{  
    protected $fillable = [ ...,'votes_detail',...];
    protected $casts = [
        'votes_detail' => 'array',
    ];
}

我的控制器是这样的:

$store = Store::find($id)
$votes_detail = $store->votes_detail;
dd($votes_detail);

dd($votes_detail) 的结果是:

{"1": "1", "5": "2"}

为什么结果还是json?

结果应该是一个数组

而我已经在演员模型中设置了数组

我该如何解决这个问题?

【问题讨论】:

  • 我认为你的模型很好。您只需直接访问该属性(例如$store-&gt;votes_detail-&gt;1)。当您尝试将其分配给变量时,它将不再起作用,因为它不是模型上下文的一部分。

标签: php arrays json laravel laravel-5.3


【解决方案1】:

你可以使用 Laravel accessors。在您的模型中定义一个完全称为 getVotesDetailAttribute($details) 的方法:

public function getVotesDetailAttribute($details)
{
    return json_decode($details, true);
}

那么当您调用$store-&gt;votes_detail 时,您将得到预期的结果。

之后,您可以使用mutators 在将数组保存回数据库时将其转换回 JSON。定义方法setVotesDetailAttribute($value)如下:

public function setVotesDetailsAttribute($value)
{
     $this->attributes['votes_detail'] = json_encode($value);
}

【讨论】:

    【解决方案2】:

    您可以通过使用toArray() 函数将数据转换为数组来轻松完成此操作。所以应该是这样的

    $store = Store::find($id)->toArray();
    

    //$store 包含一个数组。

    $votes_detail = $store['votes_detail'];
    

    将其设为dd($votes_detail) 并获得您想要的结果。

    【讨论】:

    • 我想通过演员模型设置
    • 你可以了解https://laravel.com/docs/5.4/collections & https://laravel.com/docs/5.4/collections#method-toarray
    • 很高兴知道,我的回答对你有帮助。
    • 在我看来,将整个模型转换为数组并不是最优的。您可以查看模型访问器和修改器以在访问属性之前以及在将它们存储到数据库之前对其进行操作
    【解决方案3】:

    我认为您将json_encode() 之后的数组数据存储到迁移中未定义为json() 的列中,例如:

    $table->text('votes_detail');
    

    $table->integer('votes_detail');
    

    您似乎已将votes_detail 定义为字符串、数字或其他内容。

    这就是您的问题背后的原因。因此,在迁移中将列类型定义为json

    $table->json('votes_detail');
    

    然后刷新您的迁移,您在模型中的转换将起作用,您将获得所需的数组。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-26
      • 1970-01-01
      • 1970-01-01
      • 2021-03-21
      • 1970-01-01
      • 2018-08-30
      • 1970-01-01
      相关资源
      最近更新 更多