Cakephp и база данных с необычной структурой - PullRequest
1 голос
/ 22 января 2012

как я могу получить доступ к любой таблице из базы данных в моей модели?

Например, у меня есть Index контроллер и код внутри него:

$results = $this->Index->query("SELECT COUNT(*) FROM my_own_table");


Error: Database table indices for model Index was not found.

Так что, как я понимаю,Я могу получить доступ только к таблице с именами, связанными с именем модели / контроллера.Но что делать, если я не могу изменить имя таблицы и хочу получить доступ к ее данным?

Ответы [ 2 ]

1 голос
/ 22 января 2012

Вы не ограничены использованием модели, которая напрямую связана с вашим контроллером (это просто поведение по умолчанию);Вы можете использовать любую модель.

Чтобы достичь желаемого, создайте новую модель для этой таблицы, например.MyOwnTable, и в своем контроллере вы можете добавить это свойство в класс:

public $uses = array('Index', 'MyOwnTable');

Теперь вы можете получить доступ к MyOwnTable, используя встроенную функциональность CakePHP ActiveRecord:

$results = $this->MyOwnTable->find('count');

Если у вас есть другие таблицы, к которым вы хотите получить доступ, просто создайте модели для них и добавьте их в свойство $uses.(Вы также можете использовать $this->loadModel('Model') внутри действия, если хотите).

Если у вас есть имя таблицы, которое не очень читаемо (например, my_tb_own_1_x или что-то подобное), вы можете вызвать модельКласс, понятный человеку (например, MyTable), и добавление свойства $useTable к модели:

public $useTable = 'my_tb_own_1_x';
/* and change the default primary key if you have an unusual one */
public $primaryKey = 'my_tb_own_1_x_idx_pk';

См. руководство CakePHP для получения дополнительной информации о том, как изменить модель по умолчанию и поведение контроллера:

1.3 - атрибуты модели

2.0 - атрибуты модели

1.3 - атрибуты контроллера

2.0 - Атрибуты контроллера

0 голосов
/ 22 января 2012

Неа. Вы можете получить доступ к различным таблицам. Однако CakePHP сталкивается с тем фактом, что таблица, связанная по умолчанию с моделью индекса, не существует.

Другими словами, модельный Индекс ожидает, что таблица 'индексы' существует (и выдается ошибка, когда ее нет). Вы можете сделать одну из двух вещей:

  1. Создать таблицу индексов
  2. Добавьте в свою модель индекса следующее: var $useTable = false;

Если у вас есть какое-либо использование для таблицы индексов, я бы выбрал вариант 1. Если вы не собираетесь использовать таблицу индексов, перейдите к варианту 2.

Если вы перейдете к шагу 1 или 2, ваш пример должен начать работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...