Laravel-如何更改特定字段的响应格式

Laravel-如何更改特定字段的响应格式,laravel,model,Laravel,Model,我有“产品”模型。 并且只需要为响应更改一些值格式 比如, I've "price" on database as decimal (11,2). I want this as "1.000.000,00" format on response. 或者在字段中创建到“Carbon::parse($this->created_at)->toDayDatetimeString()” 或者,我想在响应时添加3个具有我的用户属性的特定列。(是否允许等) 如何在模

我有“产品”模型。 并且只需要为响应更改一些值格式

比如,

I've "price" on database as decimal (11,2).
I want this as "1.000.000,00" format on response.
或者在字段中创建到
“Carbon::parse($this->created_at)->toDayDatetimeString()”

或者,我想在响应时添加3个具有我的用户属性的特定列。(是否允许等)

如何在模型上实现这一点?
我如何才能做出这样的响应?

您可以使用Mutator和Accessor设置格式:


作为Laravel的最佳实践,您可以使用雄辩的资源:

它基本上是模型数据和API/响应输出之间的“转换器”。 唯一需要注意的是,在资源文件中,您必须手动指定模型的所有字段和关系(如果需要)

toArray()
函数中,您可以根据需要修改模型的所有数据类型。 如果没有,您可以通过
$model->my_custom_field
访问新字段(Laravel可以自动解析getter函数的名称)

如果要在模型中执行此操作,可以创建自定义字段:

class MuModel extends Model
{

    protected $appends = ['my_custom_field'];

    public function getMyCustomFiledAttribute(){

        $newData = doSomething($this->existent_field);

        return $newData;

    }
}
$appends
变量将新字段作为普通数据库字段添加到从模型生成的所有响应中

注意:您可以为现有数据库属性创建一个getAttribute()函数,并根据需要返回值


例如:
getCreateDataAttribute()

很抱歉,此方法不会格式化/更改现有属性的值,而是生成具有新值的新属性。同时也要注意不要放置重复的属性,否则它将返回错误。
public function toArray($request)
    {
        $editedFieldValue = doSomething();
        return [
            'my_field' => $editedFieldValue,
            'other_field' => '',
        ];
    }
class MuModel extends Model
{

    protected $appends = ['my_custom_field'];

    public function getMyCustomFiledAttribute(){

        $newData = doSomething($this->existent_field);

        return $newData;

    }
}