私はトランザクションを外部に使用しようとしています。私は右の私のインデックスファイルにDBインスタンスを含む場合であるとして、それは動作します:クラスから実体をインスタンス化するときにトランザクションが機能しない
私はその後、別の場所でこのようなコードを使用することができますuse Illuminate\Database\Capsule\Manager as Db;
$db = new Db;
$db->addConnection([
'driver' => Settings::DATABASE_DRIVER,
'host' => Settings::DATABASE_HOST,
'database' => Settings::DATABASE_NAME,
'username' => Settings::DATABASE_USERNAME,
'password' => Settings::DATABASE_PASSWORD,
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => ''
]);
# Make this Capsule instance available globally via static methods... (optional)
$db->setAsGlobal();
:
Db::connection()->beginTransaction();
# Create blog post in the database and return its id
$blogPostRecordId = (new BlogDbModel())->create($_POST);
Db::connection()-> rollBack();
それが正常に動作し、ロールバックされます:何の行は作成されませんdb。
私はクラスからDBのインスタンスを取得した場合しかし、それは動作しません。
class DbSql
{
/**
* Use the eloquent query builder and orm. Bypass PDO interface.
* @return Capsule
*/
public function db()
{
$capsule = new Capsule;
$capsule->addConnection([
'driver' => Settings::DATABASE_DRIVER,
'host' => Settings::DATABASE_HOST,
'database' => Settings::DATABASE_NAME,
'username' => Settings::DATABASE_USERNAME,
'password' => Settings::DATABASE_PASSWORD,
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => ''
]);
# Make this Capsule instance available globally via static methods... (optional)
$capsule->setAsGlobal();
// Setup the Eloquent ORM... (optional; unless you've used setEventDispatcher())
//$capsule->bootEloquent();
return $capsule;
}
}
し、それは単に動作しません
(new DbSql())->db()->getConnection()->beginTransaction();
# Create blog post in the database and return its id
$blogPostRecordId = (new BlogDbModel())->create($_POST);
(new DbSql())->db()->getConnection()->rollBack();
を使用してトランザクション無視されます。クラスインスタンシエーションからdbインスタンスを取得すると、プロセスが失敗するのはなぜですか?私は必要に応じてインスタンスを使用することをお勧めします。