私は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' を返します。
誰もこの動作を知っていますか?
私は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' を返します。
誰もこの動作を知っていますか?
を連結する前に、文字列にIDをキャストします。 activerecordオブジェクトはそれが自分のプライマリキーであることを知っています(私はidフィールドを想定しています)、それをあらゆる種類のものに使用します。そのフィールドに何か他のものを選択しようとすると、これは機能しません。
たとえば、IDが1のオブジェクトを取得します。これは、#1
という名前に変更されました。現在、ARは主キーが#1
のオブジェクトであると考えています。どちらが真でないか
ボトムラインは、実際のアクティブレコードオブジェクトで作業する場合は、id
フィールドに別のものを入力しないでください。
データを取得するだけですが、$object->id
フィールドを返す場合は、#
を追加できます。例えば、私はARがこのgetId()の名前をつけることができると信じていますが、それ以外の場合は__get()
に修正してください。
は、あなたが「ID」フィールドを上書きしようとしているが、これはあなたに問題を与える
SELECT CONCAT('#', CAST(id AS CHAR(15))) AS nid
FROM location_cat
私はループしたくないのでカラム名を "id"にする必要があります。キーの名前を変更するだけの結果が得られました。実際には、他の名前を付けると、charにキャストしなくても動作します。これはphpactiverecordの動作で、everithingはmysqlでうまく動作します。 –