将铸件插入模型上

我正在使用 Laravel 5.4。


我设置了一个 $casts 数组:


protected $casts =

[

   'language_meta' => 'object'

];

但是当我插入数组时:


[

 "meta_page_title_cc__c" => "Historic villa for sale within moments of central Florence"

 "meta_page_title_fr__c" => null

 "meta_page_title_it_cc__c" => "Villa prestigiosa in vendita situata appena fuori il centro storico di"

 "meta_page_title_ru_cc__c" => null

 "meta_description_it_cc__c" => "Situata in uno dei sobborghi residenziali più prestigiosi di Firenze, questa straordinaria villa storica in vendita è una rara scoperta architettonica che unisce al suo interno magnifiche caratteristiche originali."

 "meta_description_fr_cc__c" => null

 "meta_description_ru_cc__c" => null

]

我在该数组上运行 json_encode 并得到:


{

"meta_page_title_cc__c": "Historic villa for sale within moments of central Florence",

"meta_page_title_fr__c": null,

"meta_page_title_it_cc__c": "Villa prestigiosa in vendita situata appena fuori il centro storico di",

"meta_page_title_ru_cc__c": null,

"meta_description

_it_cc__c ":"

Situata in uno dei sobborghi residenziali pi\u00f9 prestigiosi di Firenze,

questa straordinaria villa storica in vendita \u00e8 una rara scoperta architettonica che unisce al suo interno magnifiche caratteristiche originali.

","

meta_description_fr_cc__c ": null,

"meta_description_ru_cc__c": null

然后我尝试插入这个,我怀疑由于“强制转换”,它然后像这样插入数据:


"{\"meta_page_title_cc__c\":\"Luxury Property For Sale near Montecatini Tuscany\",\"meta_page_title_fr__c\":null,\"meta_page_title_it_cc__c\":\"Immobili di lusso in vendita vicino Montecatini Toscana\",\"meta_page_title_ru_cc__c\":null,\"meta_description_it_cc__c\":\"Casolare con finitura di pregio in vendita - Montecatini Toscana\",\"meta_description_fr_cc__c\":null,\"meta_description_ru_cc__c\":null}"

我无法通过迁移将列设置为“json”,因此已将该列设置为长文本。


有没有办法正确插入数据,然后通过 $casts 选项将该数据解码为预期的结果?我注意到删除 $casts 和 json 数据会正确输入。


也许有一种方法可以使用 $casts 并正确存储对象?


慕少森
浏览 115回答 1
1回答

守候你守候我

您可以使用Mutators来实现这一点,如下所示:class MyModel extends Model{    public function setLanguageMetaAttribute(array $meta)    {        $this->attributes['language_meta'] = json_encode($meta); // Store as json encoded string    }    public function getLanguageMetaAttribute(string $meta)    {        return json_decode($meta, true); // Return as associative php array    }}现在你可以像这样使用它:    $model = MyModel::find($some_id); // Or however you want to select    $model->language_meta = [        "meta_page_title_cc__c" => "Historic villa for sale within moments of central Florence"        "meta_page_title_fr__c" => null        "meta_page_title_it_cc__c" => "Villa prestigiosa in vendita situata appena fuori il centro storico di"        "meta_page_title_ru_cc__c" => null        "meta_description_it_cc__c" => "Situata in uno dei sobborghi residenziali più prestigiosi di Firenze, questa straordinaria villa storica in vendita è una rara scoperta architettonica che unisce al suo interno magnifiche caratteristiche originali."        "meta_description_fr_cc__c" => null        "meta_description_ru_cc__c" => null    ];        $model->save(); // Persists in DB as json当你去检索它时,它已经是一个数组,所以你可以这样做:    $model = MyModel::find($some_id); // Or however you want to select    foreach ($model->language_meta as $key => $value) {        // Whatever you want to do with the meta here    }
打开App,查看更多内容
随时随地看视频慕课网APP