我有一个支付对象,当从数据库中读取它并调用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',
...
];