我正在研究关于Respect Relational类库的一些问题,尽管已经阅读了所有文档但最终还是得到了一个问题。我可以在主键列未命名为“id”的记录上进行更新吗?例如:
我将测试应用于主键名称中带有'tb_'前缀的表:
tb_id
tb_nome
tb_sobrenome
当我想获得我使用的记录时:
$user = $mapper->user(array(' tb_id' => 1))->fetch();
要进行更新我使用:
$user->tb_nome = 'Alexandre';
$user->tb_sobrenome = 'Gaigalas ';
$mapper->user->persist($user);
$mapper->flush();
但它执行以下错误'PDOException',消息'SQLSTATE [42S22]:未找到列:1054'where子句'中的未知列'id',因为搜索了不存在的Class ID字段这张桌子。 可以指定我希望它进行更新的字段吗?例如:
$mapper->user(array(' tb_id' => 1))->persist($user);
答案 0 :(得分:0)
此映射器与许多数据库类一样,取决于命名约定的使用。如自述文件中所述,约定是将表中的主键列命名为id,并将外键字段命名为table_id。它确实支持"样式"哪些是对内部进行调整的类,以便它可以支持单独的约定。但是,在您的情况下,由于在每列之前使用tb_前缀,您根本没有约定。我不清楚在数据库中命名的外键列是什么。
话虽如此,处理映射问题的方法是创建自己的样式类并使用mapper应用它,如文档示例所示:
$mapper->setStyle(new MyStyle);
如果你看一下样式类,最好的办法就是让你的MyStyle类继承自实现样式接口的标准样式类。您可以查看他们的基本样式类,以便更好地了解如何在the Data class here的抽象和示例类中实现所需的类。
至少你需要一个新的标识符方法。你可以尝试这个作为一个开始,但它只是我的一个有根据的猜测:
public function identifier($name)
{
return strtolower($name);
}