我在会话中存储模型。我在我的模型中使用列映射,这样如果列名在数据库中发生变化,我就不必在整个应用程序中进行更改。 因此,如果' firstName'改为第一个'在数据库中我可以继续引用" 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'
];
}
我没有预见到更改数据库列名称,也不喜欢在数据库和应用程序中使用不同名称引用属性的不一致性。但是,我希望保持灵活性,并确保在我遇到需要进行此更改的情况下,这样做有效。
当列映射键值对不同时,是否有人知道为什么会话会破坏属性值?
答案 0 :(得分:0)
为什么要在会话中保存对象?这将消耗大量内存。最好只保存一个数组。它将保存新的映射名称。
$user = User::findFirstFromId(1000);
$this->session->set('user') = $user->toArray();