2016-08-08 20 views
0

私は、トランザクションにIDをインクリメント取得することができないのはなぜトランザクションYii 1 *で保存されたモデルIDを取得するにはどうすればよいですか?

$transaction = Yii::app()->db->beginTransaction(); 
try 
{ 
    $someModel = new SomeModel(); // extends CActiveRecord 
    $someModel->someProperty = '123'; 
    $someModel->save(); 

    $childModel = new ChildModel(); 
    $childModel->parent_id = $someModel->id; // this id is empty =(
    $childModel->save(); 
    // ... more some logic ... // 
} 
catch (\Exception $e) 
{ 
    $transaction->rollback(); 
} 
$transaction->commit(); 

のように、トランザクションに保存されたモデルでIDを取得しようか?

+0

some_modelテーブルIDは主キーと自動インクリメントに設定できます。正しい出力が得られます。 –

答えて

3

1)あなたはmodelbeforeSaveを持っているならば、それはそれのbeforeSaveが親だreturnsを確認してください。

return parent::beforeSave(); 

2)ParentModelSaved

$someModel = new SomeModel(); // extends CActiveRecord 
     $someModel->someProperty = '123'; 
     if($someModel->save()){ 

     $childModel = new ChildModel(); 
     $childModel->parent_id = $someModel->getPrimaryKey(); 
     $childModel->save(); 
} 
0

ある場合にのみChildModelを保存しよう最初のモデルは何らかのエラーのために保存できませんが、検証しないので、2番目のモデルには保存されていないモデルのIDはありません。以下を使用してください:

if ($someModel->save()) { 
    $this->saveChildModel($someModel->id); 
} 

また、someModelがデータベースの主キーの有効な構成を持っていることを確認する必要があります。

関連する問題