CakePHP useDbConfig не работает?

Итак, у меня есть свой database.php следующим образом:

public $default = array(
'datasource' => 'Database/Mysql',
'persistent' => false,
'host' => 'SOMEHOST',
'port' => 8889,
'login' => 'LOGIN',
'password' => 'PASSWORD',
'database' => 'DB1',
'prefix' => '',
'encoding' => 'utf8',
);

public $db2 = array(
'datasource' => 'Datasources.Freetds',
'persistent' => false,
'host' => 'SOMEHOST',
'port'=> 1433,
'login' => 'LOGIN',
'password' => 'PASSWORD',
'database' => 'DB2',
'prefix' => '',
'encoding' => 'utf8',
);

Затем у меня есть некоторый код SHELL, который пытается «найти» некоторые поля в одной БД, чтобы он мог перепроверить другие поля в другой БД следующим образом:

(...)
$qry = $this->Model1->find('all', array(
'fields' => array('Model1.id','Model1.field1'),
'conditions' => array(
'Model1.field2' => 'WAITING'),
'recursive' => -1));

$this->loadModel('Model2');
$num_reg=count($qry);
for ($loop=0; $loop<$num_reg;$loop++) {
$registro = $this->Model2->find("first", array(
'recursive' => -1,
'fields' => array ('Model2.field1', 'Model2.field2'),
'conditions' => array ('Model2.field1' => $qry[$loop]['Model1']['field1'])));
var_dump($registro);
(...)

Model1 использует $default и Model2 использует $db2, Model2.php следует (фрагмент):

public $useTable = 'Table';
public $primaryKey = 'key';
public $useDbConfig = "db2";

К сожалению, CakePHP, похоже, не переключает соединения и / или БД, так как я получаю Error: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'Model2.field1' in 'field list',

Отладка показала мне, что CakePHP пытается использовать базу данных по умолчанию при построении оператора SQL (select ... from DEFAULT.MODEL2TABEL as MODEL2 ....).

Есть идеи?

Заранее спасибо!

0

Решение

Я просмотрел документацию CakePHP и не смог понять, почему это не работает, но я нашел подходящий обходной путь, который задокументирован, поэтому я не буду оценивать его как «не элегантный». Если вы не согласны с моим ответом, пожалуйста, не «минус 1» меня … Это решение работает и решает мою проблему.

Я буду продолжать искать «правильный» (лучший) способ и в конечном итоге опубликовать здесь …

В любом случае, CakePHP позволяет вам настроить источник данных вашей модели «на лету», и это было то, что в итоге помогло мне.

Сразу после $this->loadModel('Model'); поместите строку как $this->Model->setDatasource('datasource'); и это сработало как шарм.

Это решило мою проблему в SHELL, но поскольку метод находится в классе модели, он, вероятно, будет работать и в контроллерах (http://api.cakephp.org/2.4/class-Model.html#_setDataSource)

0

Другие решения

Проблема здесь в том, что метод:

$this->loadModel('Model');

как-то не правильно инициирует модель.

Вы должны использовать традиционный способ:

App:uses('MyModel', 'Model');
$this->MyModel = new MyModel();

Мне было трудно понять это … Это также может решить многие другие проблемы.
Я предлагаю вам отказаться от использования loadModel() в будущем…

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector