Php Yii将数据传回模型
在过去的几个月里,我一直与Yii合作,但我遇到了一些障碍: 在我的基本控制器中,我有一个属性Php Yii将数据传回模型,php,yii,Php,Yii,在过去的几个月里,我一直与Yii合作,但我遇到了一些障碍: 在我的基本控制器中,我有一个属性public$currentUserOrganizations=NULL加载时,它使用所有登录的用户组织填充它 现在我有了一个页面,在那里我可以看到所有的组织,用户可以连接到它们,但是我已经有的组织必须说“已连接”,而不是能够添加。我正在使用bootstrapTbGridView小部件,并在我的organization模型中创建了一个函数getConnectionAction,该函数根据组织是否已连接到用
public$currentUserOrganizations=NULL代码>加载时,它使用所有登录的用户组织填充它
现在我有了一个页面,在那里我可以看到所有的组织,用户可以连接到它们,但是我已经有的组织必须说“已连接”,而不是能够添加。我正在使用bootstrapTbGridView
小部件,并在我的organization
模型中创建了一个函数getConnectionAction
,该函数根据组织是否已连接到用户,返回锚或标签
这里是我的问题:我找不到一种方法来访问组织
模型中已经加载的用户组织,因为它是我的模型类上的一个属性
代码见下文:
控制器中的操作
public function actionNew()
{
$connectionModel = Connection::model();
$organizationModel = Organisation::model();
$this->selectedSubnav = "Add";
$this->render('new', array("connectionModel" => $connectionModel, "organizationModel" => $organizationModel));
}
以下是视图中的TbGridView:
<?php
$this->widget(
'bootstrap.widgets.TbGridView',
array(
'type'=>'striped',
'enableSorting'=>true,
'id' => 'connection-rest-data',
'dataProvider' => $organizationModel->getConnectionsByOrganization($this->currentOrganisation->id),
'ajaxUpdate' => true,
'template'=>"{pager}<br>\n{items}\n{pager}",
'rowHtmlOptionsExpression' => '',
'emptyText' => Yii::t("site", "no_restults_found") . '.',
"itemsCssClass" => "table table-first-column-number data-table display full dataTable transaction_tbl",
'columns' => array(
array(
'header' => Yii::t("site", "id"),
'value' => '$data->id',
'type' => 'raw',
'name' => 'id'
),
array(
'header' => Yii::t("site", "from_unit"),
'type' => 'raw',
'value' => '$data->fromUnit["name"]',
'name' => 'fromUnit'
),
array(
'header' => Yii::t("site", "to_unit"),
'type' => 'raw',
'value' => '$data->toUnit["name"]',
'name' => 'type'
),
array(
'header' => Yii::t("site", "connection_type"),
'type' => 'raw',
'value' => '$data->type["name"]',
'name' => 'type'
),
array(
'header' => Yii::t("site", "ended"),
'type' => 'raw',
'value' => '$data->ended',
'name' => 'ended'
),
array(
'header' => Yii::t("site", "fees"),
'type' => 'raw',
'value' => 'empty($data->fees) ? "none" : $data->fees["fee"]',
'name' => 'fees'
),
array(
'header' => Yii::t("site", "actions"),
'type' => 'raw',
'value' => 'Organisation::model()->getConnectionAction($data->id, \'' . serialize($this->currentUserOrganisations) . '\'")',
'name' => 'fees'
)
),
)
);
?>
非常感谢各位,如果有什么不清楚的地方,请给我一声大叫 我想你应该避免这一次的活动记录。您可以使用加载TbGridView
。使用类似以下内容的SQL
select
org.organization_name,
user.name
from organization org
left outer join connection x on org.id = x.organization_id
join user on user.id = x.user_id
where user.id = ? or user.id is null
那个?是一个参数标记,允许您在参数数组中传入用户id,而不仅仅是将其串联。连接为SQL注入提供了一个开口
然后在gid视图的列列表中测试user.name是否为null,如果为null,则显示add按钮。如果不为空,则显示已连接。好的,因此我管理了一个与Martin所说非常接近的工作
在特定字段的视图中,我执行以下操作:
'value'=>'organization::model()->getConnectionAction($data->id',.$this->currentOrganization->id'),
id是所列组织的id,currentOrganization->id是当前组织用户的id
然后在我的模型中,我得到了用户的所有组织:
$currentOrganizations=$this->findAllForUserByOrganizationId($currentOrganizationId)代码>
浏览它们并检查它们是否匹配,完整功能如下
public function getConnectionAction ($organizationId, $currentOrgId)
{
$currentOrganizations = $this->findAllForUserByOrganizationId($currentOrgId);
foreach ($currentOrganizations as $org)
{
if(in_array($organizationId, array($org->fromUnit['id'], $org->toUnit['id'])))
{
return CHtml::label(Yii::t("site", "connected"), "", array("style" => "color:green;"));
}
}
return CHtml::link(Yii::t("site", "add_connection"), "/connection/manage/addConnection?id=$connectionId", array("class" => "createConnection"));
}
$currentOrganizations不属于controller,而是属于模型,因此只需将其移动到那里即可。它实际上属于用户,属于每个页面上的用户的所有组织,这就是为什么我们在基本控制器中设置它为什么不使用user()->currentOrganizations then?因为对于每个结果,我将查询服务器并再次获取它…您的getConnectionAction
方法除了CHtml::Link
之外不会做任何事情,因为$currentOrganizations
在到达foreach
时总是null
,因此,每次都会跳过该循环。不起作用,它来自一个DB,但来自一个api,我们有一个ActiveRecord adpater,
public function getConnectionAction ($organizationId, $currentOrgId)
{
$currentOrganizations = $this->findAllForUserByOrganizationId($currentOrgId);
foreach ($currentOrganizations as $org)
{
if(in_array($organizationId, array($org->fromUnit['id'], $org->toUnit['id'])))
{
return CHtml::label(Yii::t("site", "connected"), "", array("style" => "color:green;"));
}
}
return CHtml::link(Yii::t("site", "add_connection"), "/connection/manage/addConnection?id=$connectionId", array("class" => "createConnection"));
}