【问题标题】:Yii2 gridview relation data search for all columnYii2 gridview关系数据搜索所有列
【发布时间】:2016-03-23 10:06:02
【问题描述】:

在我的要求中,我想列出带有关系数据的 gridview,我有两个表 tbl_work(id,workid,cdr_id(foreign_key of tbl_cd)) 和 tbl_cd(id,caller, called)。

在具有hasone 关系的工作模型和cd 模型中。 然后我用 tb_work 表创建了一个网格并显示 tbl_cd 表记录。

工作模型中的搜索功能

$query = AuditorWorkItems::find();
        $query->with("cd");

        // 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([
        'id' => $this->id,
        'workid' => $this->workid,
        'cdr_id' => $this->cdr_id
    ]);

        return $dataProvider;

在我的网格中

 <?= GridView::widget([
            'dataProvider' => $dataProvider,
            'filterModel' => $searchModel,
            'columns' => [
                ['class' => 'yii\grid\SerialColumn'],
                [
                'attribute' => 'cdr_id',
                'value' => function ($model) {
                    return $model->cdr->called;

                },
            ],
           [

                'attribute' => 'cdr_id',
                'value' => function ($model) {
                    return $model->cdr->caller;
                },
            ],

它显示了被调用者和调用者的值,但过滤器不起作用,你有什么其他想法可以用 tbl_cd 表中的所有列来实现这个

【问题讨论】:

  • 发布您的搜索方法的完整代码。

标签: gridview foreign-keys yii2


【解决方案1】:

第 1 步:

在您的搜索模型中定义一个变量:

public $calledValue;

第 2 步:

在规则中应用所需的规则。

[['calledValue'], 'safe'],

第 3 步:

如果您想在加载参数之前根据搜索模型中的该列对数据进行排序,请编写以下代码:

$dataProvider->sort->attributes['calledValue'] =
    [
    'asc' => ['tbl_cd.called' => SORT_ASC], // TABLE_NAME.COLUMN_NAME
    'desc' => ['tbl_cd.called' => SORT_DESC],
    ];

第四步:

现在要过滤数据,请在您的网格过滤条件中添加此代码。

$query->andFilterWhere(['like', 'tbl_cd.called', $this->calledValue]);

第 5 步:

现在在你的索引文件中写下这段代码:

[
'attribute' => 'calledValue', //To display called value
'label' => 'Your Label',
'value' => 'tbl_cd.called'
],

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-14
    相关资源
    最近更新 更多