Laravel: SQL 使用代码块在客户对象上设置字段时出错

Laravel: SQL error when using block of code to set field on customer object

我收到以下错误。

SQLSTATE[HY000]: General error: 1364 Field 'code' doesn't have a default value (SQL: insert into coupons (updated_at, created_at) values (2019-12-23 14:06:02, 2019-12-23 14:06:02))

我进行了一些调试,发现它来自以下代码块,但不知道为什么。

if ($customer && is_null($customer->referral_code)) {
    $coupon = new Coupon;
    $coupon->generateReferralCoupon($customer);
    $coupon->save();
    $customer->referral_code = $coupon->code;
    $customer->save();
}

添加 referral_code 的迁移如下。

class AddReferralInfoToShopUsersTable extends Migration
{
    public function up()
    {
        Schema::table('shop_users', function (Blueprint $table) {
            $table->text('referral_code')->nullable();
            $table->integer('referral_uses')->nullable();
            $table->integer('referral_revenue')->nullable();
            $table->index(['referral_code']);
        });
    }
}

查看错误代码,您似乎错过了对 code 属性 的赋值,或者您没有将 code 放入 Coupon 模型中的可填充数组中。

所以很有可能不是:

$coupon->generateReferralCoupon($customer);

你应该使用:

$coupon->code = $coupon->generateReferralCoupon($customer);