2016-12-09 3 views
1

Ich habe eine Tabelle mit 'ID' als PK des Typs Int. Wenn ich die Folowing mysql Abfrage in PHP Active tunConcat String zu einer Zahl gibt 0 zurück

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

es gibt 'id' als 0, anstelle von ‚# 142'for Beispiel.

Kennt jemand dieses Verhalten?

Antwort

0

verketten Sie versuchen die ‚id‘ Feld zu überschreiben, aber das wird Sie Fragen geben. Ein ActiveRecord-Objekt kennt seinen eigenen Primärschlüssel (ich nehme das ID-Feld an) und benutzt es für alle möglichen Dinge. Wenn Sie versuchen, etwas anderes in diesem Feld auszuwählen, wird dies nicht funktionieren.

Zum Beispiel erhalten Sie das Objekt mit der ID 1. Dies wird von Ihnen in #1 umbenannt. Jetzt denkt AR, dass es ein Objekt mit einem Primärschlüssel ist, der #1 ist. Das ist nicht wahr

Bottomline ist, sollten Sie nicht etwas anderes in das Feld id setzen, wenn Sie mit einem tatsächlichen ActiveRecord-Objekt arbeiten möchten.

Sie können nur die Daten abrufen, aber beim Zurückgeben des Felds $object->id können Sie die hinzufügen. Machen Sie zum Beispiel einen magischen Getter für ID (ich glaube, AR erlaubt Ihnen, diese getId() zu nennen, aber sonst, beheben Sie es in __get().

-1

Lässt die ID in einen String Guss vor

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

Ich brauche den Spaltennamen zu "ID", weil ich nicht die Schleife Dies wiederum führt dazu, dass der Name einfach umbenannt wird, sogar wenn man ihn mit einem anderen Namen belegt, auch wenn er nicht in char umgewandelt wird. Dies ist ein Verhalten von phpactivecord, das in mysql funktioniert. –

Verwandte Themen