2016-12-09 7 views
1

私はint型のpkとしてテーブルwhith 'id'を持っています。 私は、PHPのActiveRecordにConcat数値に0を返します。

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

をfolowing mysqlのクエリをやっているとき、それは代わりに「#142'for例を、0として 'ID' を返します。

誰もこの動作を知っていますか?

答えて

0

を連結する前に、文字列にIDをキャストします。 activerecordオブジェクトはそれが自分のプライマリキーであることを知っています(私はidフィールドを想定しています)、それをあらゆる種類のものに使用します。そのフィールドに何か他のものを選択しようとすると、これは機能しません。

たとえば、IDが1のオブジェクトを取得します。これは、#1という名前に変更されました。現在、ARは主キーが#1のオブジェクトであると考えています。どちらが真でないか

ボトムラインは、実際のアクティブレコードオブジェクトで作業する場合は、idフィールドに別のものを入力しないでください。

データを取得するだけですが、$object->idフィールドを返す場合は、#を追加できます。例えば、私はARがこのgetId()の名前をつけることができると信じていますが、それ以外の場合は__get()に修正してください。

-1

は、あなたが「ID」フィールドを上書きしようとしているが、これはあなたに問題を与える

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

私はループしたくないのでカラム名を "id"にする必要があります。キーの名前を変更するだけの結果が得られました。実際には、他の名前を付けると、charにキャストしなくても動作します。これはphpactiverecordの動作で、everithingはmysqlでうまく動作します。 –

関連する問題