Допустим у меня есть такой классс
если я дергаю multiQueryTransaction(), то всё работает.
но если обращаюсь к transaction() напрямую,
То получаю эту ошибку
В целом я вроде бы понимаю - почему, но учитывая, внутри multiQueryTransaction()оно работает, то на самом деле не понимаю.
Есть ли вообще возможность обращаться transaction() напрямую? И почему в Ларавле оно сука работает?
PHP:
class Database
{
public $dbConn;
public function __construct($dbConn) {
$this->dbConn = $dbConn;
}
public function query($query, $params) {
$stmt = $this->dbConn->prepare($query);
$stmt->execute($params);
return $stmt;
}
public function transaction(Callable $f)
{
try {
$this->dbConn->beginTransaction();
$ret = $f($this);
$this->dbConn->commit();
return $ret;
} catch (\Throwable $e) {
$this->dbConn->rollBack();
throw $e;
}
}
public function multiQueryTransaction($queries)
{
$this->transaction( function () use ($queries) {
foreach ($queries as $row)
{
$this->query($row['query'], $row['params']);
}
});
}
}
но если обращаюсь к transaction() напрямую,
Код:
$db->transaction( function () {
$this->query("insert into t1 (i) values (?)",[2]);
$this->query("insert into t2 (i) values (?)",[2]);
});
В целом я вроде бы понимаю - почему, но учитывая, внутри multiQueryTransaction()оно работает, то на самом деле не понимаю.
Есть ли вообще возможность обращаться transaction() напрямую? И почему в Ларавле оно сука работает?
Последнее редактирование модератором: