【问题标题】:Yii2 searchmodel related modelYii2 searchmodel 相关模型
【发布时间】:2017-06-01 18:35:20
【问题描述】:

如您所见,我有 gridview(来自名为 umumiy 的模型)。通过 id_nomi 我正在显示 nomi.rus (这意味着来自 nomi 模型的 rus 列):

这里的问题是我试图通过umumiy gridview 从Nomi 模型进行搜索。我正在尝试通过 ajax 获取值(使用nomi.rus)。这是我尝试过的:

    $model = new UmumiyModel();
    $searchModel = new UmumiyModelSearch();

    if (Yii::$app->request->isAjax){
        $data = Yii::$app->request->post();
        $searchModel->nomi->rus = $data['dori_nomi']; // search input value
        $dataProvider = $searchModel->search(Yii::$app->request->queryParams);
        return $this->renderPartial('sotish', [
            'searchModel' => $searchModel,
            'dataProvider' => $dataProvider,
            'model' => $model,
        ]);
    }

我做错了什么???

【问题讨论】:

    标签: search yii2


    【解决方案1】:

    您可以在 NomiSearch 模型中使用公共成员来存储来自 gridview 的“Id Nomi”输入字段的文本值。

    所以,在 NomiSearch 模型中:

    class NomiSearch extends Nomi
    {
        public $nomiText;
    
        public function rules()
        {
            return [
                // ...
                [['nomiText'], 'safe'],
            ];
        }
    
        public function search($params)
        {
            $query = Nomi::find();
    
            // add conditions that should always apply here
    
            $dataProvider = new ActiveDataProvider([
                'query' => $query,
            ]);
    
            $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([
            ]);
    
            if($this->nomiText!=null)
            {
                $query->andWhere(['IN', 'id_nomi', (new \yii\db\Query())->select('id')->from('nomi')->where(['like', 'nomi', $this->nomiText])]);
            }   
    
            return $dataProvider;
        }
    
    }
    

    最后,在索引视图中:

    GridView::widget([
            'dataProvider' => $dataProvider,
            'filterModel' => $searchModel,
            'columns' => [
                [
                    'label' => 'Id Nomi',
                    'attribute' => 'nomiText',
                    'value' => function($data) {
                        return $data->nomi->rus;
                    },
    
                ],
    

    【讨论】:

    • 我忘记了一些事情。现在更新了我的问题。那么如何从相关表(nomi)中获取新值并将它们设置为$dataprovider???
    • 我对 nomi 值进行过滤的答案对于 ajax 调用也有效。
    • 按你说的尝试时这是错误的:PHP Notice 'yii\base\ErrorException' with message 'Indirect modification of overloaded property app\models\UmumiyModelSearch::$nomi has no effect'
    • 问题出在这里:$searchModel->nomi->rus = $data['dori_nomi'],因为您正在为相关模型分配值。你应该在搜索模型中使用一个字段,就像我在我的例子中展示的那样。
    • 我应该这样使用:$searchModel->nomiText 在我的控制器中吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多