Выбор имен полей при поиске результатов из двух таблиц - PullRequest
1 голос
/ 08 декабря 2010

У меня есть две таблицы (которые находятся в двух разных базах данных). «клиенты» и «домены», клиенты могут иметь несколько доменов.

Это код, который я использую:

$this->Domain->find('all', array(
    'order' => 'domain ASC',
    'fields' => array(
        'Domain.id',
        'Domain.domain',
        'Server.name',
        'Client.id',
        'Client.name'
    )
));

Когда я возвращаю все поля, не используя 'fields' => array (), все работает нормально, как только я запрашиваю определенные поля, он говорит:

Ошибка SQL: 1054: неизвестный столбец «Client.id» в «списке полей»

Все также работает нормально, если я просто удаляю два столбца клиента (модель клиента является единственной моделью, которая находится в другой базе данных.

Ответы [ 2 ]

0 голосов
/ 08 декабря 2010

Если ваши две таблицы находятся в разных базах данных, вы действительно усложняете свою жизнь. AFAIK, Cake не поддерживает объединение двух таблиц (или установление взаимосвязей) между двумя разными базами данных. Почему у вас есть клиентская таблица в отдельной БД?

Если вы не можете переместить свою таблицу, я думаю, что вам придется написать некоторый пользовательский код внутри модели вашего домена, чтобы она использовала (по умолчанию) строку подключения БД для доменов, но создала экземпляр и подключилась другой ресурс БД для другой базы данных. См. http://bakery.cakephp.org/articles/doze/2010/03/12/use-multiple-databases-in-one-app-based-on-requested-url, чтобы узнать, как это сделать - перейдите к разделу «Динамически выбирать правильную базу данных».

НТН, Travis

0 голосов
/ 08 декабря 2010

Если клиенты hasMany домены, то ваши модели должны называться как $this->Domain->find('all');, явно пропуская поля Client.id покажет ошибку, так как она не является частью таблицы доменов, включите дамп sql с помощью debug=2 и посмотрите, как запросы бегут.

у вас модели должны быть

// in client.php model - having structure - id, name
$hasMany = 'Domain';

// in domain.php model - having structure - id, name, client_id
$belongsTo = 'Client';

Это должно работать так

$this->Domain->recursive = 1;
$data = $this->Domain->find('all');
// $data = Array ( 'Domain' => ********, 'Client' => ****** )
...