J'essaye de faire un select all pour obtenir trois colonnes à partir d'une seule table, puis simplement utiliser le résultat sous forme de tableau. Sans le coût d'une boucle.Silverstripe 3.5 - Comment faire une requête pour des colonnes spécifiques et retourner un tableau
J'ai essayé en utilisant la méthode ORM:
DataObject::get('City')->sort('Name ASC')->toNestedArray();
Cela me donne un tableau parfaitement. Mais je ne peux pas voir un moyen de ne retourner que les colonnes que je veux. Il retourne toutes les colonnes. C'est un problème parce que je suis en train de coder ce tableau et le paquet est 3 fois plus grand que nécessaire.
donc j'ai essayé cela en utilisant SQLQuery à la place:
DB::query('SELECT "ID","Name","ParentID" FROM "City"');
Maintenant, cela me permet de sélectionner les trois champs, mais pour autant que je sache, il n'y a pas de méthode pour renvoyer cette requête sous la forme d'un tableau comme toNestedArray()
Recherché haut et bas mais rien ne convient. Des idées?
Editer: J'aurais dû mentionner que j'ai essayé setQueriedColumns() désolé. Cela ne semble pas être destiné à ce que je fais ici.
$cities = AspireCity::get()->sort(['Name' => 'ASC'])->setQueriedColumns(['ID', 'Name']);
Debug::dump($cities->toNestedArray());
Sorties:
Array
(
[0] => Array
(
[ClassName] => City
[LastEdited] => 2017-09-26 11:14:16
[Name] => Acacia Bay
[ID] => 70
[RecordClassName] => City
[Created] =>
[ParentID] => 9
)
[1] => Array
(
[ClassName] => City
[LastEdited] => 2017-09-26 11:14:16
[Name] => Ahaura
[ID] => 71
[RecordClassName] => City
[Created] =>
[ParentID] => 9
)
Caisse http://api.silverstripe.org/fr/3.1/class-DataList.html # _setQueriedColumns –
Merci. J'ai essayé mais ça ne semble pas fonctionner comme prévu. Voir le modifier à ma question pour plus de détails. Peut-être toNestedArray() l'ignore? – Aaryn
Je suis assez sûr que lorsque vous utilisez l'ORM, les champs du système dataobject sont toujours affichés. Ce sont ClassName, LastEdited, ID, Created. 'setQueriedColumns' vous permet ensuite de choisir les champs que vous avez ajoutés à votre modèle DataObject. Si vous voulez seulement les champs ID, Name, ParentID, vous devrez utiliser les requêtes sql comme vous l'avez fait dans votre réponse ci-dessous. –