新记录和多对多插入
New record and many to many insert
我在一个项目中工作,其中的用户有一个关联的费率计划。创建新用户时,必须指定有效的费率计划。
我有以下 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]: Integrity constraint violation: 1048 Column
'users_id' cannot be null (SQL: insert into users_rate_plans
(active
, rate_plans_id
, users_id
) values (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;
我认为你没有加载 rate_plans 实体。
$model->ratePlans()->attach($data['rate_plan'], ['active' => 1]);
这一行 $data['rate_plan']
应该是你的模型 "rate_plans" 的一个实例,我假设 $model
在这种情况下代表你的 [=14= 的实体] 模特
如果结果相同,是否也尝试过没有交易的测试?
我给你一个我的代码的例子,它是相似的:
try {
DB::beginTransaction();
$group = Group::create($data);
$employees = User::whereIn('reference', $references)->get();
$group->employees()->attach($employees);
$group->save();
DB::commit();
} catch(Exception $e) { [...] }
祝你好运
我在一个项目中工作,其中的用户有一个关联的费率计划。创建新用户时,必须指定有效的费率计划。
我有以下 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]: Integrity constraint violation: 1048 Column 'users_id' cannot be null (SQL: insert into
users_rate_plans
(active
,rate_plans_id
,users_id
) values (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;
我认为你没有加载 rate_plans 实体。
$model->ratePlans()->attach($data['rate_plan'], ['active' => 1]);
这一行 $data['rate_plan']
应该是你的模型 "rate_plans" 的一个实例,我假设 $model
在这种情况下代表你的 [=14= 的实体] 模特
如果结果相同,是否也尝试过没有交易的测试? 我给你一个我的代码的例子,它是相似的:
try {
DB::beginTransaction();
$group = Group::create($data);
$employees = User::whereIn('reference', $references)->get();
$group->employees()->attach($employees);
$group->save();
DB::commit();
} catch(Exception $e) { [...] }
祝你好运