Допустим у меня есть такой классс
	
	
	
		
если я дергаю 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() напрямую? И почему в Ларавле оно сука работает?
								
									Последнее редактирование модератором: 
								
							
						
						
	
					
	            