我想到了用于一对一插入的此类代码:

$anotherPet = \App\Pet::create($data);
$anotherUser = \App\User::create($data);
$anotherPet->user()->associate($anotherUser);

$anotherPet->save();


create()调用db还是在save()上进行事务?

3比1通话?

感谢您的帮助。

最佳答案

假设您使用的是laravel,create会执行一个事务,如果只需要一个事务,则可以创建一个新实例并像下面这样填充它:

$anotherPet = new \App\Pet;
$anotherPet->fill($data);
$anotherUser = \App\User::create($data); // transaction is made here; mandatory to have an id for your association

$anotherPet->user()->associate($anotherUser); // no transaction
$anotherPet->save(); // transaction is made here


这样,您有2个查询,而不是3个查询,我无法在没有外键约束失败的单个查询中进行查询。

关于php - Model::create是否进行数据库事务,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40425029/

10-14 02:30