【发布时间】:2017-05-15 08:21:17
【问题描述】:
在一个使用 Laravel 5.3 和 Stripe 的小项目中,我试图通过 hasOne 关系在 User 上强制创建 Subscription:
// User.php
public function subscription() {
return $this->hasOne('App\Subscription');
}
public function subscribe($data) {
return $this->subscription()->forceCreate(
// $data contains some guarded fields;
// create() will simply ignore them...
);
}
但是,我明白了:
调用未定义的方法 Illuminate\Database\Query\Builder::forceCreate()
尽管forceCreate() 是valid Eloquent method。
有什么想法可以模拟这种行为吗?或者我应该只是 save 一个 Subscription 手动分配每个字段?复杂之处在于某些字段应保留guarded,例如stripe_id.
编辑
我的快速解决方案:
// User.php @ subscribe($data)
return (new Subscription())
->forceFill([
'user_id' => $this->id,
// $data with sensitive guarded data
])
->save();
我相信还有更好的方法!
【问题讨论】:
标签: php laravel eloquent relationship laravel-5.3