Sorting Yii2相关表格过滤和排序与网格视图
我把这些问题一部分一部分地解决了,所以我想和大家分享一下,也许有人会用到它。我有4个模型:用户,证书,产品,自动。主要是用户,从用户Id我们可以看到证书,从证书Id我们可以看到产品Id,从产品Id我们可以看到autority。 我用一种方法解决它,所以也许有人可以告诉我它是好的还是有其他方法。这将是一步一步的描述。:) 1) 在模型中,设置表之间的链接(hasOne、hasMany)(必须在与下一个模型有连接的每个模型中) 2) 在主表searchmodel call connection和in connection中,使用joinWith定义数据库的关系,例如:Sorting Yii2相关表格过滤和排序与网格视图,sorting,gridview,filter,yii2,Sorting,Gridview,Filter,Yii2,我把这些问题一部分一部分地解决了,所以我想和大家分享一下,也许有人会用到它。我有4个模型:用户,证书,产品,自动。主要是用户,从用户Id我们可以看到证书,从证书Id我们可以看到产品Id,从产品Id我们可以看到autority。 我用一种方法解决它,所以也许有人可以告诉我它是好的还是有其他方法。这将是一步一步的描述。:) 1) 在模型中,设置表之间的链接(hasOne、hasMany)(必须在与下一个模型有连接的每个模型中) 2) 在主表searchmodel call connection和in
$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',
],
如果有其他更好的方法或不同的方法,我很乐意看到。:)