我已经遵循Yii扩展:多语言行为instructions通常,这是我的模型行为配置:
public function behaviors()
{
return array(
'ml' => array(
'class' => 'application.models.behaviors.MultilingualBehavior',
'langClassName' => 'CandidateLang',
'langTableName' => 'candidatelang',
'langForeignKey' => 'candidate_id',
'langField' => 'lang_id',
'localizedAttributes' => array('name', 'birth_place', 'home_city', 'intro'), //attributes of the model to be translated
'localizedPrefix' => 'l_',
'languages' => Yii::app()->params['languages'], // array of your translated languages. Example : array('fr' => 'Français', 'en' => 'English')
'defaultLanguage' => 'en', //your main language. Example : 'fr'
'createScenario' => 'insert',
'localizedRelation' => 'i18nCandidate',
'multilangRelation' => 'multilangCandidate',
'forceOverwrite' => false,
'forceDelete' => true,
'dynamicLangClass' => true, //Set to true if you don't want to create a 'PostLang.php' in your models folder
),
);
}
我收到CDbException:无法在数据库中找到活动记录类“CandidateLang”的表“{{candidatelang}}”。
以下是触发错误的地方:
private $_model;
2253
2254 /**
2255 * Constructor.
2256 * @param CActiveRecord $model the model instance
2257 */
2258 public function __construct($model)
2259 {
2260 $this->_model=$model;
2261
2262 $tableName=$model->tableName();
2263 if(($table=$model->getDbConnection()->getSchema()- >getTable($tableName))===null)
2264 throw new CDbException(Yii::t('yii','The table "{table}" for active record class "{class}" cannot be found in the database.',
2265 array('{class}'=>get_class($model),'{table}'=>$tableName)));
2266 if($table->primaryKey===null)
2267 {
2268 $table->primaryKey=$model->primaryKey();
2269 if(is_string($table->primaryKey) && isset($table->columns[$table->primaryKey]))
2270 $table->columns[$table->primaryKey]->isPrimaryKey=true;
2271 else if(is_array($table->primaryKey))
2272 {
2273 foreach($table->primaryKey as $name)
2274 {
2275 if(isset($table->columns[$name]))
2276 $table->columns[$name]->isPrimaryKey=true;
我确保桌子在那里并仔细检查了外壳和拼写。我甚至尝试从架构中添加不同的表名,没有任何运气!所以我猜这个调用导致错误:
$model->getDbConnection()
,但我不知道为什么或如何解决它?
答案 0 :(得分:1)
我有同样的问题,我修复了它。在主配置集tablePrefix => ''
中,问题应该修复。
答案 1 :(得分:0)
我试图像这样强制自动生成的模型db
变量:
public function createLangClass() {
if(!class_exists($this->langClassName, false)) {
$owner_classname = get_class($this->getOwner());
eval("class {$this->langClassName} extends CActiveRecord
{
//Forcing model db variable
self::db = Yii::app()->getDb();
public static function model(\$className=__CLASS__)
{
return parent::model(\$className);
}
public function tableName()
{
return '{{{$this->langTableName}}}';
}
public function relations()
{
return array('$owner_classname' => array(self::BELONGS_TO, '$owner_classname', '{$this->langForeignKey}'));
}
}");
}
}
我还是不知道为什么!!但它似乎有效,因为CdbException
已消失。
但是我遇到了一个新的错误,Yiibase抱怨没有找到动态自动生成的模型文件!!我之前没有Yii动态类的经验,但我仍然怀疑这个问题是yii1.1.10的新问题。如果您有任何快速修复plz评论,否则我将发布一个新问题。