Yii2多语种。Can';无法从转换表中访问字段

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

我通过composer安装了OmgDef/多语言。从导游那里一步一步地做每件事。我现在得到的错误是:

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