php - Yii2 gridview中的多表

标签 php mysql yii2

我有 2 个表,其中包含 strategyrisk_colors relations

我使用 GII 生成了模型和 CRUD,并对其进行了一些修改,以在 GridView 小部件中获取 risk_value 列。

这是我的Strategy.php

<?php

namespace backend\models;

use Yii;
use yii\db\ActiveRecord;
use yii\helpers\Url;
use yii\helpers\Html;
use yii\helpers\ArrayHelper;
use yii\db\Expression;
/**
 * This is the model class for table "strategy".
 *
 * @property int $id
 * @property string $strategy_title
 * @property string $strategy_description
 * @property string $strategy_current_money
 * @property int $risk_colors_id
 *
 * @property SelectedStrategies[] $selectedStrategies
 * @property RiskColors $riskColors
 */
class Strategy extends \yii\db\ActiveRecord
{
    /**
     * {@inheritdoc}
     */
    public static function tableName()
    {
        return 'strategy';
    }

    /**
     * {@inheritdoc}
     */
    public function rules()
    {
        return [
            [['strategy_title', 'strategy_description', 'strategy_current_money', 'risk_colors_id'], 'required'],
            [['strategy_current_money', 'risk_colors_id'], 'integer'],
            [['strategy_title'], 'string', 'max' => 255],
            [['strategy_description'], 'string', 'max' => 2055],
            [['risk_colors_id'], 'exist', 'skipOnError' => true, 'targetClass' => RiskColors::className(), 'targetAttribute' => ['risk_colors_id' => 'id']],
        ];
    }

    /**
     * {@inheritdoc}
     */
    public function attributeLabels()
    {
        return [
            'id' => 'ID',
            'strategy_title' => 'Strategy Title',
            'strategy_description' => 'Strategy Description',
            'strategy_current_money' => 'Strategy Current Money',
            'risk_colors_id' => 'Risk Color ID',
            'riskValue' => Yii::t('app', 'Risk'),
            'colorNumber' => 'Color Number',
        ];
    }

    /**
     * @return \yii\db\ActiveQuery
     */
    public function getSelectedStrategies()
    {
        return $this->hasMany(SelectedStrategies::className(), ['strategy_id' => 'id']);
    }

    /**
     * @return \yii\db\ActiveQuery
     */
    public function getRiskColors()
    {
        return $this->hasOne(RiskColors::className(), ['id' => 'risk_colors_id']);
    }

    /**
     * @return risk value
     */
    public function getRiskValue()
    {
        return $this->riskColors->risk_value;
    }

    /**
     * @return Get risk value list for dropdown
     */
    public function getRiskValueList()
    {
        $droptions = RiskColors::find()->asArray()->all();
        return ArrayHelper::map($droptions, 'id', 'risk_value'); 
    }

    /**
     * @return Get risk value list for dropdown
     */
    public function getColorNumberList()
    {
        $droptions = RiskColors::find()->asArray()->all();
        return ArrayHelper::map($droptions, 'id', 'color_number'); 
    }

}

这是我的index.php

毕竟我的 GridView 中有 risk_value 列,但看起来我无法按此字段对表进行排序。这是screenshot

这是我的 Search Model

所以我的问题是我应该怎样做才能使这个字段可排序?

最佳答案

在您的StrategySearch.php

public function search($params)
{
     $query = Strategy::find()->joinWith(['riskColors']);

     // add conditions that should always apply here

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

     $dataProvider->sort->attributes['risk_colors_id'] = [
         'asc' => ['risk_colors.risk_value' => SORT_ASC],
         'desc' => ['risk_colors.risk_value' => SORT_DESC],
     ];

     $this->load($params);

     if (!$this->validate()) {
         // uncomment the following line if you do not want to return any records when validation fails
         // $query->where('0=1');
         return $dataProvider;
     }

     // grid filtering conditions
     $query->andFilterWhere([
         'id' => $this->id,
         'strategy_current_money' => $this->strategy_current_money,
         // 'risk_colors_id' => $this->risk_colors_id,
         'risk_colors.risk_value' => $this->risk_colors_id
     ]);

     $query->andFilterWhere(['like', 'strategy_title', $this->strategy_title])
           ->andFilterWhere(['like', 'strategy_description', $this->strategy_description]);

     return $dataProvider;
}

引用GridView Sorting

关于php - Yii2 gridview中的多表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51537984/

相关文章:

php - yii2 listview分页,url错误

validation - Yii2 : How to validate XSS (Cross Site Scripting) in form/model input?

php - 使用 php 将 mysql 表列表从 mysql 导出到 csv 文件

php - 添加当前日期(今天日期)的两个表值

php - MySQL 在删除后继续添加 2 个额外的行!

mysql - #1115 - 未知字符集 : 'utf8mb4'

php - 如何在 Yii2 框架中处理 CSRF 验证?

php - 将大型 csv 文件导入 mysql 数据库

php - json_encode 不能转义单引号?

mysql - 同时选择两个条件