【问题标题】:GridView::Widget search data from another tableGridView::Widget 从另一个表中搜索数据
【发布时间】:2019-12-11 14:45:27
【问题描述】:

我有一个使用此方法填充的 GridView::widget:

StabilimentiController.php

public static function getGridColumns($isMine = true, $readonly = false) {
 $c = [
            'denominazione',
            [
                'attribute'      => 'provincia',
                'value'          => 'indirizzo.provincia',
                'headerOptions'  => ['class' => 'table-col-provincia'],
                'contentOptions' => ['class' => 'table-col-provincia'],
            ],
            [
                'attribute'      => 'created_by',
                'value'          => 'azienda.ragioneSociale',
                'headerOptions'  => ['class' => 'table-col-createdBy'],
                'contentOptions' => ['class' => 'table-col-createdBy'],
            ]
    ];

return $c;
}

我在为 created_by 字段创建可搜索输入框时遇到了一些问题。

Created_by 在我的模型中被定义为整数,它是用于明确识别公司的代码 (azienda)。

在我的Stabilimenti.php 模型中,我有这个方法可以捕获它,然后使用 getGridColumns 方法中的 .notation 可以到达我感兴趣的 ragioneSociale 字段。

/**
     * @return \yii\db\ActiveQuery
*/
    public function getAzienda() {
        return $this->hasOne(Azienda::className(), ['id' => 'azienda_id'])->inverseOf('stabilimenti');
    }

输出是我想要的,唯一的问题是我的 GridView 中的可搜索字段将 int 代码而不是 ragioneSociale 字符串作为输入,并且不是非常用户友好。

在我的StabilimentiSearch.php

public function rules(){
    return [
           [['id', 'azienda_id', 'created_by', 'updated_by'], 'integer'],
           [['denominazione', 'indirizzo', 'citta', 'localita', 'provincia', 'cap', 'produttore', 'utente', 'azienda' ], 'safe'],
             array('ragioneSociale', 'safe', 'on'=>'search'),
        ];

我将ragioneSociale 设置为安全且带有搜索选项,但我在将其正确绑定到 inputBox 时遇到了一些困难。

【问题讨论】:

    标签: gridview yii2 widget


    【解决方案1】:

    #29231013。如果你想下拉,试试这个:

                [
                    'attribute'      => 'created_by',
                    'value'          => 'azienda.ragioneSociale',
                    'headerOptions'  => ['class' => 'table-col-createdBy'],
                    'contentOptions' => ['class' => 'table-col-createdBy'],
                    'filter'         => ArrayHelper::map(Azienda::find()->asArray()->all(), 'id', 'ragioneSociale')
                ]
    
    

    如果您想要输入框和文本搜索,请参阅https://www.yiiframework.com/wiki/653/displaying-sorting-and-filtering-model-relations-on-a-gridview。为搜索模型添加属性和过滤条件:

    
    class StabilimentiSearch extends Stabilimenti
    {
        public $ragioneSociale;
    
        public function rules()
        {
            return [
                // ... more stuff here
                [['ragioneSociale'], 'safe'],
                // ... more stuff here
            ];
        }
    
        public function search($params)
        {
            // create ActiveQuery
            $query = Tour::find();
    
            $query->joinWith(['azienda']);
    
            $dataProvider = new ActiveDataProvider([
                'query' => $query,
            ]);
    
            // No search? Then return data Provider
            if (!($this->load($params) && $this->validate())) {
                return $dataProvider;
            }
            // Some filters
            $query->andFilterWhere([
                //... other searched attributes here
            ])
            ->andFilterWhere(['like', 'azienda.ragioneSociale', $this->ragioneSociale]);
    
            return $dataProvider;
        }
    }
    

    并在 GridView 中将此属性用作属性:

                [
                    'attribute'      => 'ragioneSociale',
                    'value'          => 'azienda.ragioneSociale',
                    'headerOptions'  => ['class' => 'table-col-createdBy'],
                    'contentOptions' => ['class' => 'table-col-createdBy'],
                ]
    

    【讨论】:

      猜你喜欢
      • 2010-12-04
      • 1970-01-01
      • 2021-06-12
      • 2014-05-01
      • 2013-10-08
      • 1970-01-01
      • 2013-01-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多