【发布时间】:2017-09-19 19:04:26
【问题描述】:
我在一个项目中工作,其中用户有一个相关的费率计划。创建新用户时,必须指定有效的费率计划。
我有以下 MySQL 架构和 Eloquent 模型:
/**
* User Eloquent model file ...
*
*/
public function ratePlans() {
return $this->belongsToMany(
'App\Models\RatePlan',
'users_rate_plans',
'users_id',
'rate_plans_id'
);
}
所以,要使用您选择的费率计划创建新用户,我会这样做:
try {
\DB::beginTransaction();
$model->create($data);
$model->ratePlans()->attach($data['rate_plan'], ['active' => 1]);
\DB::commit();
return $model;
} catch(\Exception $e) {
\DB::rollback();
return false;
}
但是,我得到了下一个例外:
SQLSTATE[23000]:违反完整性约束:1048 列 'users_id' 不能为空(SQL:插入
users_rate_plans(active,rate_plans_id,users_id) 值 (1, 43, ))
为什么交易没有成功?我怎样才能完成这项任务?
更新 1
我更改了交易代码,但结果是一样的。
try {
\DB::beginTransaction();
$ratePlan = \App\Models\RatePlan::find($data['rate_plan']);
$user->ratePlans()->attach($ratePlan, ['active' => 1]);
$user->create($data);
\DB::commit();
return $user;
} catch(\Exception $e) {
\DB::rollback();
die($e->getMessage());
return false;
}
更新 2
我再次更改了交易代码及其工作原理:
\DB::beginTransaction();
$user = \App\Models\User::create($data);
$ratePlan = \App\Models\RatePlan::find($data['rate_plan']);
$user->ratePlans()->attach($ratePlan, ['active' => 1]); \DB::commit();
return $user;
【问题讨论】:
-
我认为您需要选择创建用户的Id并将其附加到函数中。
-
@Nikolaus 是一个事务,我不知道创建的用户 ID。反正按照official documentation的说法是没有必要的。
标签: mysql transactions eloquent many-to-many lumen