Cakephp Model игнорирует настройки базы данных

Обновление: пожалуйста, смотрите мой раздел РЕДАКТИРОВАТЬ ниже, где я объясняю, что я обнаружил после тестирования

Я работаю над сайтом с CakePHP 2.5.1, и у меня очень странное поведение: один из 2 моделей у меня есть кажется отказаться от использования другой конфигурации базы данных (отличной от конфигурации по умолчанию), если я не размещу ее в настройках Cake по умолчанию модель папку (если я поместил его там все отлично работает).

Обе модели расположены в одной папке, которая оказывается не папка модели по умолчанию (это потому, что они доступны другим веб-сайтам, и у меня есть центральное место, где я размещаю все общие).

Чтобы Cake нашел эти модели, я использую следующую строку кода в bootstrap.php файл: App::build(array('Model' => array(dirname(ROOT) . DS . '_shared/Cake_v2/Model')));

2 модели у меня там называются Campanya а также EjercicioMultChoice.

Кажется, все настроено правильно:

  • Если я распечатаю App::objects('Model') Я вижу обе модели, перечисленные там, что означает, что Cake находит их в этой внешней папке
  • Если я распечатаю get_class_vars('DATABASE_CONFIG') Я вижу обе конфигурации базы данных: дефолт один, используемый Campanya, и обычай один (называется BD_Contenidos), использован EjercicioMultChoice.
  • Обе модели включены в AppController.php с $uses переменный массив.

Я могу позвонить Campanya Модель в контроллере без проблем. Однако при вызове EjercicioMultChoice модель, я получаю следующую ошибку:

MISSING DATABASE TABLE
Error: Table ejercicio_mult_choices for model EjercicioMultChoice was not found in datasource default.

Вот как EjercicioMultChoice Файл модели выглядит так:

class EjercicioMultChoice extends AppModel {

public $name = 'EjercicioMultChoice';
public $primaryKey = 'id';
public $useTable = 'ejercicios_multiple_choice';
public $useDbConfig = 'BD_Contenidos';
}

Как видите, эта модель указывает на использование определенной конфигурации базы данных, о которой Cake знает, но в показанной выше ошибке говорится, что она не может найти таблицу в источнике данных. дефолт. Конечно, это невозможно, потому что его там нет, он находится в другой таблице в другой базе данных (которая, кстати, находится на том же сервере, что и другая база данных, и я использую ее без проблем в других проектах).

Как я уже упоминал выше, если я перееду точно так же, EjercicioMultChoice.php файл модели по умолчанию Cake приложение / модель / папка, то у меня нет никаких проблем.

Так что я немного растерялся здесь, я не знаю, что еще я могу проверить, чтобы найти, в чем проблема.

РЕДАКТИРОВАТЬ

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

Если я добавлю эти 2 строки кода (оба из них) до вызова модели то все отлично работает:

$this->EjercicioMultChoice->setDataSource('BD_Contenidos');
$this->EjercicioMultChoice->setSource('ejercicios_multiple_choice');

Это ясно означает, что, хотя Cake находит EjercicioMultChoice.php Файл модели, в котором указаны имена базы данных и таблицы, игнорируются эти 2 переменные ($ useTable а также $ useDbConfig). Единственный способ заставить это работать — вручную установить эти две переменные с помощью методов, которые я написал выше.

Почему это происходит? Этого не происходит, если файл модели находится в папке по умолчанию …

0

Решение

Ну да ладно, похоже, проблема была в том, что я не ставил трейлинг / в App :: сборка () дорожка. Правильный должен быть App::build(array('Model' => array(dirname(ROOT) . DS . '_shared/Cake_v2/Model/')));

Мне было трудно понять, что Cake действительно находил модели в этой папке, даже без запаздывания. /, но по какой-то причине это помешало загрузке внутреннего содержимого этих файлов модели.

Во всяком случае, это работает сейчас!

0

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

Насколько я могу судить, торт НЕ загружает предоставленный вами файл модели!
Вы можете узнать, поставив exit(); вызовите в первой строке этого (общего) файла и посмотрите, соблюдает ли это ваше приложение (показывая белую страницу, -)).

Если нет, файл вашей модели не будет подхвачен cakephp.

Другой способ проверить, подобран ли ваш файл модели, — определить пользовательскую переменную-член, такую ​​как public $myModelTestVar = 'sharedModel'; в файл и просто проверьте переменную в контроллере, который использует модель (просто debug($this->EjercicioMultChoice) в действии).

Если вы можете подтвердить / доказать, что файл поднят, я добровольно настрою этот сценарий и попробую сам, что там происходит — но я уверен, что я прав.

debug(dirname(ROOT) . DS . '_shared/Cake_v2/Model')

чтобы доказать, что он указывает на то, где вы ожидаете.

0

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