Yii 在视图中显示来自不同表的数据

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

我有一个要求,我想显示一个记录列表,每个记录中的信息可以来自多个表。为了进一步解释,我有以下表格:

带有列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

这一切都是关于模型中的关系。 通过正确的关系,您可以访问以下数据:

$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)

4-现在您可以使用yii-gii创建代码,所有关系都将保存在模型类中

5-现在加载视图中的数据将非常简单:

例如,如果您的模型类似于:

<?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)

4-现在您可以使用yii-gii创建代码,所有关系都将保存在模型类中

5-现在加载视图中的数据将非常简单:

例如,如果您的模型类似于:

<?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('*'),
),
}