Laravel Model create函数返回具有null值的列

时间:2016-02-02 21:06:20

标签: laravel laravel-5.1

在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静态创建方法也会收到正确的参数。我也照顾了大规模的任务。

1 个答案:

答案 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);
}

因此,在设置网关属性之后,应该调用父的构造函数并传递属性。