PHP尊重关系 - 从特定列更新

时间:2015-01-28 16:53:06

标签: php mysql pdo

我正在研究关于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);

1 个答案:

答案 0 :(得分:0)

此映射器与许多数据库类一样,取决于命名约定的使用。如自述文件中所述,约定是将表中的主键列命名为id,并将外键字段命名为table_id。它确实支持"样式"哪些是对内部进行调整的类,以便它可以支持单独的约定。但是,在您的情况下,由于在每列之前使用tb_前缀,您根本没有约定。我不清楚在数据库中命名的外键列是什么。

话虽如此,处理映射问题的方法是创建自己的样式类并使用mapper应用它,如文档示例所示:

$mapper->setStyle(new MyStyle);

如果你看一下样式类,最好的办法就是让你的MyStyle类继承自实现样式接口的标准样式类。您可以查看他们的基本样式类,以便更好地了解如何在the Data class here的抽象和示例类中实现所需的类。

至少你需要一个新的标识符方法。你可以尝试这个作为一个开始,但它只是我的一个有根据的猜测:

public function identifier($name)
{
    return strtolower($name);
}