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
等)正在“交易”中收集。
后一种情况符合症状。
我正在尝试将新记录 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
等)正在“交易”中收集。
后一种情况符合症状。