Yii 在视图中显示来自不同表的数据
我有一个要求,我想显示一个记录列表,每个记录中的信息可以来自多个表。为了进一步解释,我有以下表格: 带有列id(PK)、srpname、idbusiness(FK)、idsite(FK)的表srp 具有列id(PK)、businessname的表业务 具有列id(PK)、sitename的表站点 具有列id(PK)、idsrp(FK)、pname的表srpprimary 表srpdepname中的id(PK)、idsrp(FK)、dname列 srp可以在srpprimary表中有多个条目,在business、site、srpdepname等其他表中各有一个条目 我想显示的是一条srp记录以及srpprimary表中的所有pname条目、srpdepname表中的dname以及实际的业务名称和站点名称 我查看了CListView,但看不出如何获得这些额外的数据 如能就如何最好地实现上述目标提出任何建议,将不胜感激 问候 e25taki这一切都是关于模型中的关系。 通过正确的关系,您可以访问以下数据:Yii 在视图中显示来自不同表的数据,yii,Yii,我有一个要求,我想显示一个记录列表,每个记录中的信息可以来自多个表。为了进一步解释,我有以下表格: 带有列id(PK)、srpname、idbusiness(FK)、idsite(FK)的表srp 具有列id(PK)、businessname的表业务 具有列id(PK)、sitename的表站点 具有列id(PK)、idsrp(FK)、pname的表srpprimary 表srpdepname中的id(PK)、idsrp(FK)、dname列 srp可以在srpprimary表中有多个条目,在b
$srp = Srp::model()->findByPk(1);
$sites = $srp->sites; // gets an active record-array with a HAS_MANY-relation
$site = $srp->site; // gets the active record directly with a HAS_ONE-relation
考虑到Gii中的代码生成,如果您重命名外键,使它们以“id”或“\u id”结尾,您将有一个更轻松的时间。这样,在生成模型时,您将自动获得可感知的关系。(尽管它们可能仍需要稍作调整以满足您的需要。)
使用新关系,您可以在视图中创建如下列表视图:
$dataProvider=new CActiveDataProvider('Srp');
$this->widget('zii.widgets.CListView', array(
'dataProvider' => $dataProvider,
'itemView' => '_view',
));
并访问您的数据,例如(_view.php):
Id://或者更好:echo-CHtml::encode($data->getAttributeLabel('Id'));
业务:
地点:
部门名称:
,
部门名称:
:
(我没有尝试过这个,所以它不是一个有效的例子。对不起!但它应该会给你一个想法,而且它离事实不远。)这都是关于模型中的关系。
通过正确的关系,您可以访问以下数据:
$srp = Srp::model()->findByPk(1);
$sites = $srp->sites; // gets an active record-array with a HAS_MANY-relation
$site = $srp->site; // gets the active record directly with a HAS_ONE-relation
考虑到Gii中的代码生成,如果您重命名外键,使它们以“id”或“\u id”结尾,您将有一个更轻松的时间。这样,在生成模型时,您将自动获得可感知的关系。(尽管它们可能仍需要稍作调整以满足您的需要。)
使用新关系,您可以在视图中创建如下列表视图:
$dataProvider=new CActiveDataProvider('Srp');
$this->widget('zii.widgets.CListView', array(
'dataProvider' => $dataProvider,
'itemView' => '_view',
));
并访问您的数据,例如(_view.php):
Id://或者更好:echo-CHtml::encode($data->getAttributeLabel('Id'));
业务:
地点:
部门名称:
,
部门名称:
:
(我还没有尝试过这个,所以它不是一个有效的示例。抱歉!但它应该会给您一个想法,而且这离事实不远。)为了帮助您解决这个问题,在您的下一个项目中,我建议您使用数据库关系: 1-刷新你的数据库 2-把你的关系写在纸上 3-执行(例如使用phpmyadmin):
- 通过GUI方法
- Sql方法 更改表格顺序 添加约束fk_PerOrders 外键(P_Id) 推荐人(P_Id)
<?php
..
public function relations()
{
// NOTE: you may need to adjust the relation name and the related
// class name for the relations automatically generated below.
return array(
'co' => array(self::BELONGS_TO, 'Country', 'co_id'),
'events' => array(self::HAS_MANY, 'Events', 'city'),
'news' => array(self::HAS_MANY, 'News', 'city'), /// here
'users' => array(self::HAS_MANY, 'Users', 'city'),
);
}
...
?>
为了在这个问题和下一个项目中帮助您,我建议您使用数据库关系: 1-刷新你的数据库 2-把你的关系写在纸上 3-执行(例如使用phpmyadmin):
- 通过GUI方法
- Sql方法 更改表格顺序 添加约束fk_PerOrders 外键(P_Id) 推荐人(P_Id)
<?php
..
public function relations()
{
// NOTE: you may need to adjust the relation name and the related
// class name for the relations automatically generated below.
return array(
'co' => array(self::BELONGS_TO, 'Country', 'co_id'),
'events' => array(self::HAS_MANY, 'Events', 'city'),
'news' => array(self::HAS_MANY, 'News', 'city'), /// here
'users' => array(self::HAS_MANY, 'Users', 'city'),
);
}
...
?>
controller.php中的
公共函数actionquerys()
{
$dataProvider=新的CActiveDataProvider('Student',数组(
“条件”=>数组(
'与'=>'学生',
'join'=>'内部联接studentinfo si ON si.stud\u id=t.id',
)
));
$this->render('query',数组(
“dataProvider”=>$dataProvider,
));
}
在视图中,在表模型视图中为ex query.php生成php文件
//在_view.php文件中添加新字段:
//在controller.php中
在accsessRule()中,为ex.querys添加用于身份验证的新文件
公共函数访问规则()
{
返回数组(
数组('allow',//允许所有用户执行'index'和'view'操作
'actions'=>array('index'、'view'、'querys'),
'users'=>array('*'),
),
}
在controller.php中
公共函数actionquerys()
{
$dataProvider=新的CActiveDataProvider('Student',数组(
“条件”=>数组(
'与'=>'学生',
'join'=>'内部联接studentinfo si ON si.stud\u id=t.id',
)
));
$this->render('query',数组(
“dataProvider”=>$dataProvider,
));
}
在视图中,在表模型视图中为ex query.php生成php文件
//在_view.php文件中添加新字段:
//在controller.php中
在accsessRule()中,为ex.querys添加用于身份验证的新文件
公共函数访问规则()
{
返回数组(
数组('allow',//允许所有用户执行'index'和'view'操作
'actions'=>array('index'、'view'、'querys'),
'users'=>array('*'),
),
}