【问题标题】:Phalcon models clobbered in sessionPhalcon 模型在会话中被破坏
【发布时间】:2015-05-22 20:47:39
【问题描述】:

我正在会话中存储一个模型。我在我的模型中使用列映射,因此如果数据库中的列名发生更改,我不必在整个应用程序中进行更改。 因此,如果数据库中的“firstName”更改为“first”,我可以在整个应用程序中继续引用“firstName”。在我的测试中,我发现除非列映射键和值相等,否则该属性将在会话中始终存储为 null。

这将起作用:

/**
 * Independent Column Mapping.
 *
 * Keys reference property in database
 * Values reference property application-wide
 */

// db column name = 'firstName'
public static function columnMap()
{
    return
    [
        'firstName' => 'firstName'
    ];
}

这将起作用:

// db column name = 'first'
public static function columnMap()
{
    return
    [
        'first' => 'first'
    ];
}

这将失败:

// db column name = 'first'
public static function columnMap()
{
    return
    [
        'first' => 'firstName'
    ];
}

我预计不会更改数据库列名称,我也不喜欢在数据库和应用程序中通过不同名称引用属性的不一致。不过,我想保持灵活性,并确保在遇到需要进行此更改的情况时,此方法可以正常工作。

有谁知道为什么当列映射键值对不同时会话会破坏属性值?

【问题讨论】:

    标签: session phalcon columnmappings


    【解决方案1】:

    为什么要在会话中保存对象?这会消耗大量内存。最好只保存一个数组。它会保存新的映射名称。

    $user = User::findFirstFromId(1000);
    $this->session->set('user') = $user->toArray();
    

    【讨论】:

    • 我通过跟踪会话文件查看了会话中存储的内容,并注意到当一个对象保存在 phalcon 会话中时,它只存储您上面提供的 toArray() 数据,而不是序列化的对象。以这种方式存储它的原因是因为当你从会话 phalcon 中“获取”它时,它会将关联的模型与数组数据结合起来。不,它不会保存新的映射名称 - 你看到我在我的问题中关于列映射的观点了吗?
    猜你喜欢
    • 2011-07-05
    • 2019-02-23
    • 1970-01-01
    • 2013-10-31
    • 2012-07-24
    • 2011-09-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多