将字符串连接到数字 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()
.
我有一个 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()
.