facebook twitter hatena line email

「Php/Symfony/Symfony2/doctrine/一括処理」の版間の差分

提供: 初心者エンジニアの簡易メモ
移動: 案内検索
(update処理を2つ)
行1: 行1:
 +
==トランザクション==
 +
update処理を2つするとトランザクションが自動でかかる
  
 
==update処理を2つ(外部キーなし)==
 
==update処理を2つ(外部キーなし)==
行10: 行12:
 
  $em->flush();
 
  $em->flush();
 
*persistの順序通りに処理される。persistの順序を入れ替ええるとログも逆になる
 
*persistの順序通りに処理される。persistの順序を入れ替ええるとログも逆になる
 +
[2016-12-26 18:25:38] doctrine.DEBUG: "START TRANSACTION" [] []
 
  [2016-12-26 18:25:38] doctrine.DEBUG: INSERT INTO categorys (name) VALUES (?) {"1":"4組"} []
 
  [2016-12-26 18:25:38] doctrine.DEBUG: INSERT INTO categorys (name) VALUES (?) {"1":"4組"} []
 
  [2016-12-26 18:25:38] doctrine.DEBUG: INSERT INTO categorys (name) VALUES (?) {"1":"3組"} []
 
  [2016-12-26 18:25:38] doctrine.DEBUG: INSERT INTO categorys (name) VALUES (?) {"1":"3組"} []
 +
[2016-12-26 18:25:38] doctrine.DEBUG: "COMMIT" [] []
  
 
==update処理を2つ(外部キーあり)==
 
==update処理を2つ(外部キーあり)==
行25: 行29:
 
*categoryを後にpersistしても外部キーを貼ってる方(category)から先に実行されるっぽい。
 
*categoryを後にpersistしても外部キーを貼ってる方(category)から先に実行されるっぽい。
 
*persistの順序を逆にしてもログの順序は同じだった
 
*persistの順序を逆にしてもログの順序は同じだった
 +
[2016-12-26 18:21:32] doctrine.DEBUG: "START TRANSACTION" [] []
 
  [2016-12-26 18:21:32] doctrine.DEBUG: INSERT INTO categorys (name) VALUES (?) {"1":"3組"} []
 
  [2016-12-26 18:21:32] doctrine.DEBUG: INSERT INTO categorys (name) VALUES (?) {"1":"3組"} []
 
  [2016-12-26 18:21:32] doctrine.DEBUG: INSERT INTO users (name, description, category_id) VALUES (?, ?, ?) {"1":"taro","2":"太郎です","3":null} []
 
  [2016-12-26 18:21:32] doctrine.DEBUG: INSERT INTO users (name, description, category_id) VALUES (?, ?, ?) {"1":"taro","2":"太郎です","3":null} []
 +
[2016-12-26 18:21:32] doctrine.DEBUG: "COMMIT" [] []

2016年12月27日 (火) 10:56時点における版

トランザクション

update処理を2つするとトランザクションが自動でかかる

update処理を2つ(外部キーなし)

$category = new \Acme\HelloBundle\Entity\Category();
$category->setName("3組");
$category4 = new \Acme\HelloBundle\Entity\Category();
$category4->setName("4組");
$em = $this->getDoctrine()->getEntityManager();
$em->persist($category4);
$em->persist($category);
$em->flush();
  • persistの順序通りに処理される。persistの順序を入れ替ええるとログも逆になる
[2016-12-26 18:25:38] doctrine.DEBUG: "START TRANSACTION" [] []
[2016-12-26 18:25:38] doctrine.DEBUG: INSERT INTO categorys (name) VALUES (?) {"1":"4組"} []
[2016-12-26 18:25:38] doctrine.DEBUG: INSERT INTO categorys (name) VALUES (?) {"1":"3組"} []
[2016-12-26 18:25:38] doctrine.DEBUG: "COMMIT" [] []

update処理を2つ(外部キーあり)

$category = new \Acme\HelloBundle\Entity\Category();
$category->setName("3組");
$user = new \Acme\HelloBundle\Entity\User();
$user->setName('taro');
$user->setDescription('太郎です');
$em = $this->getDoctrine()->getEntityManager();
$em->persist($user);
$em->persist($category);
$em->flush();
  • categoryを後にpersistしても外部キーを貼ってる方(category)から先に実行されるっぽい。
  • persistの順序を逆にしてもログの順序は同じだった
[2016-12-26 18:21:32] doctrine.DEBUG: "START TRANSACTION" [] []
[2016-12-26 18:21:32] doctrine.DEBUG: INSERT INTO categorys (name) VALUES (?) {"1":"3組"} []
[2016-12-26 18:21:32] doctrine.DEBUG: INSERT INTO users (name, description, category_id) VALUES (?, ?, ?) {"1":"taro","2":"太郎です","3":null} []
[2016-12-26 18:21:32] doctrine.DEBUG: "COMMIT" [] []