Yii2如何设置关系别名

Yii2如何设置关系别名,yii2,Yii2,我有一个类别表,其中的“父”列引用了同一个表。当我试图更新GridView以显示父类别名称而不是类别父id时,这会给我带来一些麻烦 如何在yii2中定义关系别名?这是我的代码 /models/CategorySearch.php $params['id'] = (int)$params['id']; $query = Category::find()->where(['root' => $params['id']]); 字段root它是您的字段parent。 namespace a

我有一个类别表,其中的“父”列引用了同一个表。当我试图更新GridView以显示父类别名称而不是类别父id时,这会给我带来一些麻烦

如何在yii2中定义关系别名?

这是我的代码

/models/CategorySearch.php

$params['id'] = (int)$params['id'];
$query = Category::find()->where(['root' => $params['id']]);
字段
root
它是您的字段
parent
namespace app\models;

use Yii;
use yii\base\Model;
use yii\data\ActiveDataProvider;
use app\models\Category;

/**
 * CategorySearch represents the model behind the search form about `app\models\Category`.
 */
class CategorySearch extends Category
{
    /**
     * @inheritdoc
     */
    public function rules()
    {
        return [
            [['id', 'rank'], 'integer'],
            [['name', 'description'], 'safe'],
        ];
    }

    /**
     * @inheritdoc
     */
    public function scenarios()
    {
        // bypass scenarios() implementation in the parent class
        return Model::scenarios();
    }

    /**
     * Creates data provider instance with search query applied
     *
     * @param array $params
     *
     * @return ActiveDataProvider
     */
    public function search($params)
    {
        $params['id'] = (int)$params['id'];
        $query = Category::find()->where(['root' => $params['id']]);

        $dataProvider = new ActiveDataProvider([
            'query' => $query,
        ]);

        if (!($this->load($params) && $this->validate())) {
            return $dataProvider;
        }

        $query->andFilterWhere([
            'id' => $this->id,
            'rank' => $this->rank,
        ]);

        $query->andFilterWhere(['like', 'name', $this->name])
            ->andFilterWhere(['like', 'description', $this->description]);

        return $dataProvider;
    }
}
控制器:

public function actionIndex()
    {
        $searchModel = new CategorySearch();
        $dataProvider = $searchModel->search(Yii::$app->request->queryParams);

        return $this->render('index', [
            'searchModel' => $searchModel,
            'dataProvider' => $dataProvider,
        ]);
    }
已解决:

我在CategorySearch模型中添加了别名: 它与关系getParentCategory()联接,并将名称parentCategory作为“category”表的别名

public function search($params)
{
    $query = Category::find();

    $query->joinWith(['createdBy'])->joinWith(['parentCategory' => function($query) { $query->from(['parentCategory' => 'category']); }]);

    $query->andFilterWhere(['like', 'name', $this->name])
        ->andFilterWhere(['like', 'user.username', $this->created_by])
        ->andFilterWhere(['like', 'parentCategory.name', $this->parent]);