为了账号安全,请及时绑定邮箱和手机立即绑定

将铸件插入模型上

将铸件插入模型上

PHP
慕少森 2023-08-19 16:31:29
我正在使用 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 并正确存储对象?
查看完整描述

1 回答

?
守候你守候我

TA贡献1802条经验 获得超10个赞

您可以使用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

    }


查看完整回答
反对 回复 2023-08-19
  • 1 回答
  • 0 关注
  • 114 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号