我在我的会话中存储一个模型。我在我的模型中使用列映射,因此如果数据库中的列名发生更改,我不必在整个应用程序中进行更改。因此,如果数据库中的“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'
];
}
我预计不会更改数据库列名称,也不喜欢在数据库和应用程序中通过不同名称引用属性的不一致。但是,我想保持灵活性并确保这在我遇到需要此更改的情况时有效。
有谁知道为什么当列映射键值对不同时会话会破坏属性值?