Model::Create() 方法不使用 InnoDB 存储引擎插入

Model::Create() method not inserting with InnoDB storage engine

我正在尝试将新记录 customer 插入 MySQL 数据库,如下所示:

$customer = Customer::create(['name'=>$request->customerName,
'email'=>$request->customerEmail,
'phone'=>$request->customerPhone,
'area_id'=>$request->customerArea,
'gender'=>$request->customerGender]);
dd($customer->id);

它适用于 myISAM 存储引擎并且有一条新记录,但不适用于 InnoDB,post 请求 returns 200数据库中没有记录。虽然转储 dd() returns 新的 ID 是自动递增的。 ID 已经被占用,因为当我插入一条新记录时,它会给我一个比以前更新的 ID,数据库中也没有记录。

这是客户模型结构:

namespace App\Models\User;

use Illuminate\Database\Eloquent\Model;

class Customer extends Model
{
    protected $fillable = [
        'name', 'phone', 'email', 'area_id', 'gender'
    ];

    protected $table = 'customers';
}

这里是 customers table 结构:

既然你已经创建了你的Customer模型,你为什么不直接使用它呢:

$customer = new Customer();
$customer->name = $request->customerName;
$customer->email = $request->customerEmail;
$customer->phone = $request->customerPhone;
$customer->area_id = $request->customerArea;
$customer->gender = $request->customerGender;
$customer->save();

PS。当然,不要忘记将您的 Customer 模型导入您的 控制器

使用InnoDB时,你至少需要了解一点“事务”。

如果您有autocommit=ON,每条语句(例如INSERT)本身就是一个事务,并且会自动COMMITTed

如果您有 autocommit=OFF,您最终必须发出 COMMIT。这是因为语句(INSERTs 等)正在“交易”中收集。

后一种情况符合症状。