代码之家  ›  专栏  ›  技术社区  ›  TKoL

Laravel模型-uncast特定列

  •  0
  • TKoL  · 技术社区  · 5 年前

    我有一个laravel表,其中有一列是在迁移中定义的:

    $table->json('json');
    

    在模型中,我将其转换为一个数组:

    protected $casts = [
        'json' => 'array'
    ];
    

    在我需要的大部分时间里,这都能很好地工作,但是有一个api调用我正在进行,我实际上希望我的模型集合给我原始字符串,而不是将它强制转换到数组中。

    因此,假设我的模型名为model,那么我的api调用如下所示:

    $systemModels = Model::whereNull('user_id')->get();
    $userModels = Model::where('user_id', $user->id)->get();
    
    return response()->json([
            'user_models' => $userModels->toArray(),
            'system_models' => $systemModels->toArray()
        ]);
    

    在这里,我希望将模型的“json”列呈现为字符串,而不是强制转换为数组。有可靠的方法吗?

    1 回复  |  直到 5 年前
        1
  •  2
  •   thefallen    5 年前

    在模型中,可以定义自定义属性,该属性在序列化模型时添加:

    class YourModel extends Model
    {
        protected $appends = ['json_raw'];
    
        public function getJsonRawAttribute()
        {
            return $this->attributes['json'];
            // or return json_encode($this->attributes['json']);
        }
    }
    

    然后在做 toArray() 你可以的 $userModels->makeHidden('json')->toArray(); 删除不需要的浇铸字段。

    推荐文章