Laravel 5.2 Eloquent toArray将属性设置为0


Laravel 5.2 Eloquent toArray sets attribute to 0

我有一个支付对象,当从数据库中读取它并调用dd($payment)时,它看起来像这样

#attributes: array:7 [▼
"user_id" => 90
"plan_id" => 4
"payment_id" => "AP-4AF14082B16992740"
"status" => "done"
"progress" => 0
"created_at" => "2016-05-04 18:05:48"
"updated_at" => "2016-05-04 18:06:21"
]

然而,当对其调用toArray()时,它看起来像这个

array:7 [▼
  "user_id" => 90
  "plan_id" => 4
  "payment_id" => 0
  "status" => "done"
  "progress" => 0
  "created_at" => "2016-05-04 18:05:48"
"updated_at" => "2016-05-04 18:06:21"
]

有什么想法吗?

查询:

$payment = Auth::user()->payments()->orderBy('updated_at', 'desc')->first();

这可能是因为三种可能性之一(均在Payment模型中):

1

有一个访问器集看起来像:

public function getPaymentIdAttribute($value) {
    return (int)$value;
}

2

您已经在模型中设置了$casts字段,看起来像:

protected $casts = [
    ...
    'payment_id' => 'integer',
    ...
];

如果您正在调用$attributes数组,那么这两件事不会解决问题。

编辑

3

这是你的答案:

因为如果payment_id是模型中的主键,那么laravel模型会在toArray()调用时自动将其强制转换为int。解决方案是在Payment模型中将其强制转换为这样的字符串(它将覆盖Laravel默认值):

protected $casts = [
    ...
    'payment_id' => 'string',
    ...
];