?

Log in

Работа с несколькими базами - ru_mzz [entries|archive|friends|userinfo]
ru_mzz

[ website | Официальный сайт mzz ]
[ userinfo | livejournal userinfo ]
[ archive | journal archive ]

Работа с несколькими базами [Sep. 22nd, 2006|11:04 am]
ru_mzz

ru_mzz

[jonix]
Вернется опять к нашим баранам :)
Для получения ID последней вставленной записи, необходимо передавать alias соединения.
Потому что в mzzPdoStatement->execute($parameters = null)
идет вызов $db = DB::factory();
А так как не указано имя соединения (alias), то будет использоватся alias по умолчанию, то есть default.
Самое простое что придумывается, передавать alias в mzzPdoStatement->execute, что и было мною сделано. Но эти изменения в новых ревизиях пропали.
Какие предложения?
linkReply

Comments:
[User Picture]From: zerkms
2006-09-22 05:12 am (UTC)
имхо это варварский способ...
предлагаю топать в другом направлении:
у нас mzzPdoStatement в коде появляются откуда? после $db->prepare и $db->query ? если только после них, то почему бы их не отнаследовать и в этих отнаследованных методах не сделать $stmt->setDbConnection($this); ??
(Reply) (Thread)
[User Picture]From: jonix
2006-09-22 05:30 am (UTC)
только после $db->prepare.
То есть в mzzPdo
public function prepare($query, $driver_options = array())
{
$this->queriesPrepared++;
$stmt = parent::prepare($query, $driver_options);
$stmt->setDbConnection($this->alias);
return $stmt;
}

а в mzzPdoStatement
private $alias;
public function execute($parameters = null)
{
$db = DB::factory($this->alias);
$start_time = microtime(true);
$result = parent::execute($parameters);
$db->addQueriesTime(microtime(true) - $start_time);

$lastInsertId = $db->lastInsertId();

return ($result && $lastInsertId) ? $lastInsertId : $result;
}

(Reply) (Parent) (Thread)
[User Picture]From: zerkms
2006-09-22 05:56 am (UTC)
зачем делать

$stmt->setDbConnection($this->alias);

и потом

$db = DB::factory($this->alias);


когда можно сразу

$stmt->setDbConnection($this);

и в стейтменте юзать:
$this->dbConnection; ($this->db)
(Reply) (Parent) (Thread)
From: (Anonymous)
2006-09-22 06:00 am (UTC)
ага зачем фабрику вызывать, если сам объект передать можно
(Reply) (Parent) (Thread)
[User Picture]From: jonix
2006-09-22 07:11 am (UTC)
964
в simple.mapper тоже надо передавать название соединения
(Reply) (Parent) (Thread)
[User Picture]From: zerkms
2006-09-22 10:12 am (UTC)
не понял. уточни
(Reply) (Parent) (Thread)