【问题标题】:New record and many to many insert新记录和多对多插入
【发布时间】: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


【解决方案1】:

我认为您没有加载 rate_plans 实体。

$model->ratePlans()->attach($data['rate_plan'], ['active' => 1]);

在这一行中 $data['rate_plan'] 应该是您的模型“rate_plans”的一个实例,我假设在这种情况下 $model 代表您的 User 模型的实体

如果结果相同,是否也尝试过没有事务的测试? 我给你一个类似的代码示例:

try {
        DB::beginTransaction();
        $group = Group::create($data);
        $employees = User::whereIn('reference', $references)->get();
        $group->employees()->attach($employees);
        $group->save();
        DB::commit();
} catch(Exception $e) { [...] }

祝你好运

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-23
    • 2017-04-06
    • 1970-01-01
    • 1970-01-01
    • 2019-12-18
    • 2018-07-28
    • 1970-01-01
    • 2021-07-12
    相关资源
    最近更新 更多