Yii2多语种。Can';无法从转换表中访问字段
我通过composer安装了OmgDef/多语言。从导游那里一步一步地做每件事。我现在得到的错误是:Yii2多语种。Can';无法从转换表中访问字段,yii2,yii2-advanced-app,multilingual,Yii2,Yii2 Advanced App,Multilingual,我通过composer安装了OmgDef/多语言。从导游那里一步一步地做每件事。我现在得到的错误是: Getting unknown property: backend\models\PageAdminSearch::title 我添加了joinWith('translation')但没有任何变化。这是我的PageAdmin模型和PageAdminSearch 页面管理员: <?php namespace backend\models; use omgdef\multilingual
Getting unknown property: backend\models\PageAdminSearch::title
我添加了joinWith('translation')
但没有任何变化。这是我的PageAdmin
模型和PageAdminSearch
页面管理员:
<?php
namespace backend\models;
use omgdef\multilingual\MultilingualBehavior;
use omgdef\multilingual\MultilingualQuery;
use Yii;
/**
* This is the model class for table "page_admin".
*
* @property int $id
* @property int $id_in
* @property int $enable
* @property string $icon
*/
class PageAdmin extends \yii\db\ActiveRecord
{
public static function find()
{
return new MultilingualQuery(get_called_class());
}
public function behaviors()
{
$allLanguages = [];
foreach (Yii::$app->params['languages'] as $title => $language) {
$allLanguages[$title] = $language;
}
return [
'ml' => [
'class' => MultilingualBehavior::className(),
'languages' => $allLanguages,
//'languageField' => 'language',
//'localizedPrefix' => '',
//'requireTranslations' => false',
//'dynamicLangClass' => true',
//'langClassName' => PostLang::className(), // or namespace/for/a/class/PostLang
'defaultLanguage' => Yii::$app->params['languageDefault'],
'langForeignKey' => 'page_id',
'tableName' => "{{%page_adminlang}}",
'attributes' => [
'title',
'content',
]
],
];
}
/**
* @inheritdoc
*/
public static function tableName()
{
return 'page_admin';
}
/**
* @inheritdoc
*/
public function rules()
{
return [
[['icon'], 'string'],
[['id_in', 'enable'], 'integer']
];
}
/**
* @inheritdoc
*/
public function attributeLabels()
{
return [
'id' => Yii::t('app', 'ID'),
'id_in' => Yii::t('app', 'Id In'),
'icon' => Yii::t('app', 'Icon'),
];
}
}
没有使用它,但是查看您的代码,您正在模型中的搜索()函数中添加一个joinWith
,您是否使用一些gridview或搜索表单搜索翻译表中任何名为title
的字段
如果是这样,您需要在searchModel中声明一个自定义属性
,并将其添加到安全规则
中,然后使用它,因为您在该行中遇到错误
$query->andFilterWhere(['like', 'title', $this->title]);
因此,在PageAdminSearch
public $title
在关系中使用别名总是好的
$query = PageAdmin::find()
->joinWith(['translations'=>function($q){
$q->from('{{%transalations}} tr');
}]);
然后将规则更新为以下内容
/**
* @inheritdoc
*/
public function rules()
{
return [
[['id', 'id_in'], 'integer'],
[['title'],'safe'],
];
}
$query->andFilterWhere(['like', 'tr.title', $this->title]);
并将行更改为以下内容
/**
* @inheritdoc
*/
public function rules()
{
return [
[['id', 'id_in'], 'integer'],
[['title'],'safe'],
];
}
$query->andFilterWhere(['like', 'tr.title', $this->title]);
现在运行它不会显示错误。添加了一个答案,看看它是否有助于您解决问题。在我的特定情况下,不会。但我猜它可能对其他人有帮助。威尔:哥们,你总是这样做,为什么对你的情况没有帮助?发生这种情况时,请在答案上留下评论,以便我可以根据您的要求进行调整@TomaTomov