在Laravel中,当我运行以下查询时,它返回一个空值的行。
//Cards.php
public function __construct(array $attributes = []) {
$this->gateway = StripeGateway;
}
protected $fillable = ['user_id', 'card_id', 'customer_id', 'exp_year', 'exp_month', 'funding', 'brand', 'last4'];
public function createNewCardFromCustomer($user_id, $customer)
{
$result = $this->create([
'user_id' => $user_id,
'customer_id' => $customer->id,
'card_id' => $customer['sources']['data'][0]->id,
'exp_year' => $customer['sources']['data'][0]->exp_year,
'exp_month' => $customer['sources']['data'][0]->exp_month,
'funding' => $customer['sources']['data'][0]->funding,
'brand' => $customer['sources']['data'][0]->brand,
'last4' => $customer['sources']['data'][0]->last4
]);
return $result;
}
即使Model静态创建方法也会收到正确的参数。我也照顾了大规模的任务。
答案 0 :(得分:2)
我也在Laracasts上发布了这个:)
无论如何,您必须将构造函数更改为:
public function __construct(array $attributes = []) {
$this->gateway = StripeGateway;
parent::__construct($attributes);
}
您正在覆盖Model的基本构造函数,它会更改其默认行为。 Laravel使用构造函数来完成很多事情(创建方法,关系等)。
基础模型的构造函数做了几件事,但其中一个非常重要的部分是它接受一个数组来填充其属性,如下所示:
public function __construct(array $attributes = [])
{
$this->bootIfNotBooted();
$this->syncOriginal();
$this->fill($attributes);
}
因此,在设置网关属性之后,应该调用父的构造函数并传递属性。