gpt4 book ai didi

Laravel - 对象不会存储到数据库,当它实际存在时说它是空的

转载 作者:行者123 更新时间:2023-12-04 03:52:04 26 4
gpt4 key购买 nike

我有一个处理 Stripe 支付过程的 Controller ,当我去存储从 Stripe 检索回来的订阅信息时,我可以通过 dd() 返回的数组结构来验证对象是否存在。但是,当它存储到数据库中时,它会显示以下内容。

//错误输出;

SQLSTATE[HY000]: General error: 1364 Field 'user_id' doesn't have a default value (SQL: insert into `subscriptions` (`updated_at`, `created_at`) values (2020-10-06 21:47:42, 2020-10-06 21:47:42))

我从来没有经历过这个......

    // If the subscription status is explicitly active
if ($subscription->status === 'active') {

// define the needed information to fulfill the process.
$this->setStripeSubscriptionId($subscription->id);
$this->setStripeSubscriptionStatus($subscription->status);
$this->setStripeSubscriptionPlanId($subscription->plan->id);
$this->setStripeSubscriptionTrialEndOn($subscription->trial_end);
$this->setStripeSubscriptionPlanBillingInterval($subscription->plan->interval);
...
}

保存到数据库的方法

private function storeSubscriptionRecord() {
$newSub = new StripeSubscription();
$newSub->user_id = $this->getAccountRecordLocatorID();
$newSub->name = $this->getPlanName();
$newSub->stripe_id = $this->getStripeSubscriptionId();
$newSub->stripe_status = $this->getStripeSubscriptionStatus();
$newSub->stripe_plan = $this->getStripeSubscriptionPlanId();
$newSub->quantity = 1;
$newSub->trial_ends_at = $this->getStripeSubscriptionTrialEndOn();
$newSub->ends_at = $this->subscriptionTermEnds($this->getStripeSubscriptionPlanBillingInterval());
$newSub->save();
}

//我已验证其他对象值中的 user_id 存在并由 dd() 对象验证...

dd($this->dumpValuesToDebug());

调试方法

public function dumpValuesToDebug() {
return array(
'UserID' => $this->getAccountRecordLocatorID(),
'Status' => $this->getStripeSubscriptionStatus(),
'SubID' => $this->getStripeSubscriptionId(),
'PlanID' => $this->getStripeSubscriptionPlanId(),
'TrailEnd' => $this->getStripeSubscriptionTrialEndOn(),
'BillingInterval' => $this->getStripeSubscriptionPlanBillingInterval()
);
}

//将返回以下...

array:6 [▼
"UserID" => "991beba9-2520-410b-a570-2105bd59da86"
"Status" => "active"
"SubID" => "sub_I9p70GG3lXbcSU"
"PlanID" => "price_1HZ9bTD9P7MB4xUmsjQ9suKO"
"TrailEnd" => null
"BillingInterval" => "month"
]

//不知道为什么 sql 乱七八糟的...

我的模型没有任何限制

class Subscription extends Model
{
// TODO finish model.
protected $table = 'subscriptions';
public $user_id;
public $name;
public $stripe_id;
public $stripe_status;
public $stripe_plan;
public $quantity;
public $trial_ends_at;
public $ends_at;
}

想法?

有没有人有处理这个特定问题的任何想法或经验?

悬崖;尝试将值存储到数据库中,SQL 表示事务缺少键值。验证这些值确实存在。

最佳答案

如果你有公共(public)属性,那么你将不会设置你的属性($model->user_id = ... 正在设置一个名为 user_id 的公共(public)属性,而不是属性名为 user_id)。模型的“属性”(从数据库中检索的内容,以及用于保存模型的内容)不是公共(public)属性,它们保存在名为 attributes 的 protected 数组中。

Eloquent 模型利用类可用的魔术方法来访问和设置不可访问的属性,以获取 __get 和设置 __set 属性。

删除您认为是字段的所有公共(public)属性。

关于Laravel - 对象不会存储到数据库,当它实际存在时说它是空的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64310510/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com