-1

过去几个月我一直在与 Yii 合作,但我遇到了一些障碍:

在我的基本控制器中,我有一个属性public $currentUserOrganisations = NULL;,它在加载时使用所有登录的用户组织填充它。

现在我有一个页面,我可以在其中获取所有组织并且用户可以连接到它们,但是我已经拥有的那些必须说“已连接”而不是能够添加。我正在使用引导TbGridView小部件,并在我的Organisation模型中创建了一个函数,该函数getConnectionAction返回锚点或标签,具体取决于组织是否已连接到用户。

这是我的问题:我找不到访问模型中已加载的用户组织的方法Organisation,因为它是我模型类的一个属性。

请参阅下面的代码:

控制器中的动作

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'
                )
            ),
        )
    );
?>

这是Organisations模型中的功能:

public function getConnectionAction ($connectionId)
    {
        $currentOrganizations = null; //This I need to get the public $currentUserOrganisations = NULL; value
        foreach ($currentOrganizations as $org)
        {
            if($org->id == $connectionId)
            {
                return CHtml::label(Yii::t("site", "connected"), "", array("style" => "color:green;"));
            }
        }
        return CHtml::link("Add", "/connection/manage/addConnection?id=$connectionId");
    }

非常感谢伙计们,如果有什么不清楚的地方,请大声告诉我!

4

2 回答 2

0

好的,所以我设法解决了与马丁所说的非常接近的工作。

在特定领域的视图中,我这样做:

'value' => 'Organisation::model()->getConnectionAction($data->id, ' . $this->currentOrganisation->id . ')',

id 是列出的组织的 id,currentOrganization->id 是用户当前组织的 id。

然后在我的模型中,我为用户获取所有组织:

$currentOrganizations = $this->findAllForUserByOrganizationId($currentOrgId);

遍历它们并检查它们是否匹配,下面的完整功能。

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"));
    }
于 2013-09-12T14:42:33.090 回答
-1

我认为您将要避免使用 Active Record。您可以使用CSqlDataProvider来加载您的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

那 ?是一个参数标记,允许您在参数数组中传递 user_id 而不仅仅是连接它。连接为 SQL 注入提供了一个开口。

然后在您的 gid 视图的列列表中测试 user.name 是否为 null,如果为 null,则显示添加按钮。如果不为空,则显示已连接。

于 2013-09-11T20:56:07.053 回答