Search code examples
phpmysqlphpactiverecord

Concat String to a number returns zero


I'm having a table whith 'id' as pk of type int. When I'm doing the folowing mysql query in php activerecord

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

it returns 'id' as 0, instead of '#142'for example.

Does anyone knows this behavior?


Solution

  • You are trying to overwrite the 'id' field, but this will give you issues. An activerecord object knows it's own primary key (i'd assume the id-field), and uses it for all sorts of stuff. If you try to select something else into that field, this will not work.

    For instance, you get the object with id 1. This is renamed to #1 by you. now AR thinks it is an object with a primary key that is #1. Which is not true

    Bottomline is, you should not put something else in the id field if you want to work with an actual activerecord object.

    What you might want to do is just get the data, but on returning the $object->id field, you can add the #. For instance, make a magic getter for id (I believe AR allows you to name this getId(), but otherwise, fix it in __get().