Yii2相关表格过滤并使用网格视图排序

时间:2016-05-16 10:16:42

标签: sorting gridview filter yii2

我有一部分问题并现在解决,所以我想分享也许有人会用它。我有4个型号:用户,证书,产品,Autority。主要是用户,来自我们看到证书的用户ID,来自证书ID我们是产品ID,来自产品ID我们看到了autority。 我以一种方式解决它,所以也许有人可以告诉我它是好还是有其他方法可以做到这一点。这将是一步一步的描述。 :)

1)在模型中设置表之间的链接(hasOne,hasMany)(这必须在每个模型中与下一个模型连接)

public function getCertificate()
{   return  $this->hasOne(Certificate::className(),['id_customer' =>'id']); } 

2)在主表searchmodel中调用连接并在连接中使用joinWith来定义数据库的关系,例如:

$query = Users::find()
    -> where (['USERSTB.id_user' =>Yii::$app->session->get('user.idcustomer') ])
            ->joinWith('Certificate')
            ->joinWith('Certificate.Products')
            ->joinWith('Certificate.Products.Autority');

3)为附加表中的每个字段添加searchmodel公共变量,例如:

public $cert_description;
public $cert_autority_description;
public $cert_actdate;
public $cert_expdate;  
public $cert_domain;   

4)在rules()和字段safe中添加变量名称,例如:

public function rules()
{   return [ [ ['cert_domain','cert_description','cert_autority_description','cert_actdate','cert_expdate'], 'safe'],      ];  }

5)在搜索方法中添加sort,在$dataProvider的声明下使用它,例如:

$dataProvider->sort->attributes['cert_description'] = [
    'asc' => ['products.description' => SORT_ASC],
    'desc' => ['products.description'=> SORT_DESC], ];  

6)使用andFilterWhere添加搜索查询:

 ->andFilterWhere(['like', 'products.description', $this->cert_description])

7)最后在Index GridView中显示您要查看的属性的数据,例如:

 [  
    'attribute' => 'cert_description',  // !!! important to matches the name attribute
    'label'=>'Certificate',
    'value'=> 'Certificate.Products.description', 
],

如果有任何其他更好的方法或不同的方法,我会很高兴看到它。 :)

0 个答案:

没有答案