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