2013-11-18 2 views
1

Я пытаюсь получить переведенные данные в CakePHP, но у меня возникают некоторые проблемы.Cakephp Перевести недостающую таблицу

Моя модель подобна следующим.

class Newelement extends AppModel{ 
    public $name = "Newelement"; 

    public $actsAs = array(
     'Translate' => array(
      'title' => 'titleTranslation', 
      'subtitle' => 'subtitleTranslation', 
      'content' => 'contentTranslation' 
     ) 
    ); 

    // Use a different model (and table) 
    public $translateModel = 'NewElementTranslation'; 
    // Use a different table for translateModel 
    public $translateTable = 'newelement_translations'; 
} 

И моя модель для перевода заключается в следующем:

class NewelementTranslation extends AppModel { 
    public $displayField = 'field'; // important 
} 

Я могу сохранить данные с разных местах. Данные сохраняются в базе данных.

Но когда я пытаюсь получить данные с помощью «найти» метод ...

$newelements = $this->Newelement->find(); 
print_r($newelements); 

Я получаю следующее сообщение об ошибке:

Missing Database Table 
Error: Table new_element_translations for model titleTranslation was not found in datasource default. 
Notice: If you want to customize this error message, create app/View/Errors/missing_table.ctp 
Stack Trace 

CORE/Cake/Model/Model.php line 3476 → Model->setSource(string) 
CORE/Cake/Model/Datasource/DboSource.php line 1063 → Model->getDataSource() 
CORE/Cake/Model/Model.php line 2880 → DboSource->read(Newelement, array) 
CORE/Cake/Model/Model.php line 2852 → Model->_readDataSource(string, array) 
APP/Controller/NewelementsController.php line 39 → Model->find() 
[internal function] → NewelementsController->index() 
CORE/Cake/Controller/Controller.php line 490 → ReflectionMethod->invokeArgs(NewelementsController, array) 
CORE/Cake/Routing/Dispatcher.php line 187 → Controller->invokeAction(CakeRequest) 
CORE/Cake/Routing/Dispatcher.php line 162 → Dispatcher->_invoke(NewelementsController, CakeRequest, CakeResponse) 
APP/webroot/index.php line 110 → Dispatcher->dispatch(CakeRequest, CakeResponse) 

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

class Newelement extends AppModel{ 
    public $name = "Newelement"; 

    public $actsAs = array(
     'Translate' => array(
      'title' => 'titleTranslation', 
      'subtitle' => 'subtitleTranslation', 
      'content' => 'contentTranslation' 
     ) 
    ); 
} 

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

Если кто-то может мне помочь, было бы здорово, потому что я застрял в этом.

Спасибо!

+0

Я не уверен, но попробуйте придерживаться стандартов капитализации - ваша модель должна быть 'NewElement', а не' Newelement' ... и т. Д. – Dave

+0

Спасибо! У меня была ошибка с одним из классов модели, как вы сказали. – peiblox

ответ

1

У вас есть некоторые проблемы, связанные с именованием, без сомнения, как сказал Дейв. Я бы рекомендовал изменения в NewElement и соответствующую таблицу будет new_elements ... тогда на ваши переводы я хотел бы сделать следующее:

// Use a different model (and table) 
public $translateModel = 'NewElementTranslation'; 
// uses the new_element_translations table if no model file is written by default. 
Смежные вопросы