【问题标题】:Codeigniter Datamapper ORM issue with array and object?数组和对象的 Codeigniter Datamapper ORM 问题?
【发布时间】:2013-08-16 19:15:09
【问题描述】:

我有一个块代码:

    // Creat a object
    $privilege = new Privilege();

    // Get all privileges
    $privilege->get_iterated();
    $privileges = $privilege->all_to_array(array('id', 'name', 'description'));

    // Get user privileges
    $user_privileges = $privilege->get_user_privileges(array('id' => (int) $id), FALSE);

    // If user has the privilege which is marked as 1,
    // otherwise marked as 0
    foreach ($privileges as $key => $item) {
        foreach ($user_privileges as $value) {
            $privileges[$key]['has_privilege'] = (in_array($value, $item) == TRUE) ? 1 : 0;
        }
    }

我的问题: $privileges 包含 cms 中的所有权限,$user_privileges 包含特定用户的权限。我将 $privileges$user_privileges 进行比较:如果用户具有标记为 1 的权限,否则标记为 0,则我解析为视图

$this->_data['privileges'] = $privileges;

鉴于,我必须使用 $privileges['...'](array) 来显示结果,但我想使用:$privileges->....(object ) 去做。

我该怎么做?非常感谢。

【问题讨论】:

  • 你不能将过滤移动到 sql 域,只选择用户可用的 Privilage 实例吗?例如,如果您可以从get_user_privilages 为用户返回Privilage ID,那么它只是一个where_in()。另外,为什么要使用 continious-integration 标签?
  • 所以在这种情况下,我不能使用对象并仍然像上面的代码一样使用数组。

标签: php codeigniter codeigniter-datamapper


【解决方案1】:

如果您省略 $privilege->all_to_array(...) 行,您仍然可以为创建的对象分配新属性。

只需像这样更改 for 循环中的赋值语法:

$privilege = new Privilege();
// IMPORTANT! 
// Don't use get_iterated if you want to iterate on the results more than once!
$privilege->get();
$user_privileges = $privilege->get_user_privileges(array('id' => (int) $id), FALSE);

foreach ($privileges as $privilege) {
    foreach ($user_privileges as $value) {
        // the individual $privilage instances wont be cloned for the iteration
        // so when we add has_privilage property they will "remember" it 
        // when you iterate on the same $privilages object once again in the vew
        $privilege->has_privilege = (in_array($value, $item) == TRUE) ? 1 : 0;
    }
}

现在在视图中你可以这样写:

<?php foreach ($privileges as $privilege): ?>
    <?php print $privilege->name ?> 
    The user <?php print $privilage->has_privilage ? 'have it' : 'dont have it' ?>.
<?php endforeach; ?>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多