将字符串连接到数字 returns 零

Concat String to a number returns zero

我有一个 table 和 'id' 作为 int 类型的 pk。 当我在 php activerecord

中执行以下 mysql 查询时

Location_cat::find_by_sql("select concat('#',id) as 'id', text FROM location_cat");

它 returns 'id' 为 0,而不是 '#142' 例如。

有人知道这种行为吗?

让我们在连接之前将 id 转换为字符串

SELECT  CONCAT('#', CAST(id AS CHAR(15))) AS nid
FROM   location_cat

您正在尝试覆盖 'id' 字段,但这会给您带来问题。一个 activerecord 对象知道它自己的主键(我假设是 id 字段),并将它用于各种东西。如果您尝试 select 将其他内容放入该字段,这将不起作用。

比如你得到了id为1的对象,这个被你重命名为#1。现在 AR 认为它是一个主键为 #1 的对象。这不是真的

底线是,如果您想使用实际的 activerecord 对象,则不应在 id 字段中放置其他内容。

您可能只想获取数据,但在返回 $object->id 字段时,您可以添加 #。例如,为 id 制作一个魔术 getter(我相信 AR 允许您命名此 getId(),但除此之外,将其修复为 __get().