gpt4 book ai didi

PHP Respect Relational - 从特定列更新

转载 作者:行者123 更新时间:2023-11-29 23:08:15 27 4
gpt4 key购买 nike

我正在研究一些关于 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”,因为搜索的类 ID 字段不存在于这张 table 。可以指定我希望哪个字段进行更新吗?例如:


$mapper->user(array(' tb_id' => 1))->persist($user);

最佳答案

这个映射器像许多数据库类一样依赖于命名约定的使用。正如自述文件中所述,约定是表中的主键列名为 id,外键字段名为 table_id。它确实支持“样式”,这些样式是对内部进行调整的类,以便它可以支持单独的约定。但是,就您而言,由于在每列之前使用 tb_ 前缀,因此根本没有约定。我不清楚外键列在数据库中的名称是什么。

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

$mapper->setStyle(new MyStyle);

如果您查看样式类,您最好的选择可能是让 MyStyle 类继承自实现样式化接口(interface)的标准样式类。您可以查看它们的基本样式类,以更好地了解如何在 the Data class here 中的抽象类和示例类中实现所需的类。 .

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

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

关于PHP Respect Relational - 从特定列更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28197885/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com