Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sorting Yii2相关表格过滤和排序与网格视图_Sorting_Gridview_Filter_Yii2 - Fatal编程技术网

Sorting Yii2相关表格过滤和排序与网格视图

Sorting Yii2相关表格过滤和排序与网格视图,sorting,gridview,filter,yii2,Sorting,Gridview,Filter,Yii2,我把这些问题一部分一部分地解决了,所以我想和大家分享一下,也许有人会用到它。我有4个模型:用户,证书,产品,自动。主要是用户,从用户Id我们可以看到证书,从证书Id我们可以看到产品Id,从产品Id我们可以看到autority。 我用一种方法解决它,所以也许有人可以告诉我它是好的还是有其他方法。这将是一步一步的描述。:) 1) 在模型中,设置表之间的链接(hasOne、hasMany)(必须在与下一个模型有连接的每个模型中) 2) 在主表searchmodel call connection和in

我把这些问题一部分一部分地解决了,所以我想和大家分享一下,也许有人会用到它。我有4个模型:用户,证书,产品,自动。主要是用户,从用户Id我们可以看到证书,从证书Id我们可以看到产品Id,从产品Id我们可以看到autority。 我用一种方法解决它,所以也许有人可以告诉我它是好的还是有其他方法。这将是一步一步的描述。:)

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

2) 在主表searchmodel call connection和in connection中,使用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;   
public function rules()
{   return [ [ ['cert_domain','cert_description','cert_autority_description','cert_actdate','cert_expdate'], 'safe'],      ];  }
$dataProvider->sort->attributes['cert_description'] = [
    'asc' => ['products.description' => SORT_ASC],
    'desc' => ['products.description'=> SORT_DESC], ];  
 [  
    'attribute' => 'cert_description',  // !!! important to matches the name attribute
    'label'=>'Certificate',
    'value'=> 'Certificate.Products.description', 
],
4) 在
rules()
safe
字段中添加变量名,例如:

public $cert_description;
public $cert_autority_description;
public $cert_actdate;
public $cert_expdate;  
public $cert_domain;   
public function rules()
{   return [ [ ['cert_domain','cert_description','cert_autority_description','cert_actdate','cert_expdate'], 'safe'],      ];  }
$dataProvider->sort->attributes['cert_description'] = [
    'asc' => ['products.description' => SORT_ASC],
    'desc' => ['products.description'=> SORT_DESC], ];  
 [  
    'attribute' => 'cert_description',  // !!! important to matches the name attribute
    'label'=>'Certificate',
    'value'=> 'Certificate.Products.description', 
],
5) 将排序添加到搜索方法中,在
$dataProvider
的声明下使用它,例如:

public $cert_description;
public $cert_autority_description;
public $cert_actdate;
public $cert_expdate;  
public $cert_domain;   
public function rules()
{   return [ [ ['cert_domain','cert_description','cert_autority_description','cert_actdate','cert_expdate'], 'safe'],      ];  }
$dataProvider->sort->attributes['cert_description'] = [
    'asc' => ['products.description' => SORT_ASC],
    'desc' => ['products.description'=> SORT_DESC], ];  
 [  
    'attribute' => 'cert_description',  // !!! important to matches the name attribute
    'label'=>'Certificate',
    'value'=> 'Certificate.Products.description', 
],
6) 使用AndFilter在以下位置添加搜索查询:

 ->andFilterWhere(['like', 'products.description', $this->cert_description])
7) 最后,在索引GridView中显示要查看的属性上的数据,例如:

public $cert_description;
public $cert_autority_description;
public $cert_actdate;
public $cert_expdate;  
public $cert_domain;   
public function rules()
{   return [ [ ['cert_domain','cert_description','cert_autority_description','cert_actdate','cert_expdate'], 'safe'],      ];  }
$dataProvider->sort->attributes['cert_description'] = [
    'asc' => ['products.description' => SORT_ASC],
    'desc' => ['products.description'=> SORT_DESC], ];  
 [  
    'attribute' => 'cert_description',  // !!! important to matches the name attribute
    'label'=>'Certificate',
    'value'=> 'Certificate.Products.description', 
],
如果有其他更好的方法或不同的方法,我很乐意看到。:)