1

我在我的会话中存储一个模型。我在我的模型中使用列映射,因此如果数据库中的列名发生更改,我不必在整个应用程序中进行更改。因此,如果数据库中的“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'
    ];
}

我预计不会更改数据库列名称,也不喜欢在数据库和应用程序中通过不同名称引用属性的不一致。但是,我想保持灵活性并确保这在我遇到需要此更改的情况时有效。

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

4

1 回答 1

0

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

$user = User::findFirstFromId(1000);
$this->session->set('user') = $user->toArray();
于 2015-03-31T19:40:19.527 回答