我有一部分问题并现在解决,所以我想分享也许有人会用它。我有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',
],
如果有任何其他更好的方法或不同的方法,我会很高兴看到它。 :)