Salut a tous,
j'ai un propbleme avec la fonction Hash::extract sur la version 3.0 de CakePHP, je lui donne le resultat en array, mais j'ai rien en retour, j'ai check la doc, mais je crois qu'ils ne l'on pas update depuis la v2.x.
Pour avoir une idee voici le array en question :
Array
(
[0] => App\Model\Entity\Autocomplete Object
(
[_properties:protected] => Array
(
[id] => 1
[value] => Item
[created] => Cake\I18n\Time Object
(
[date] => 2014-10-29 18:57:25
[timezone_type] => 3
[timezone] => UTC
)
[modified] => Cake\I18n\Time Object
(
[date] => 2014-10-29 18:57:25
[timezone_type] => 3
[timezone] => UTC
)
)
[_original:protected] => Array
(
)
[_hidden:protected] => Array
(
)
[_virtual:protected] => Array
(
)
[_className:protected] => App\Model\Entity\Autocomplete
[_dirty:protected] => Array
(
)
[_new:protected] =>
[_errors:protected] => Array
(
)
[_accessible:protected] => Array
(
[*] => 1
)
[_repositoryAlias:protected] => Autocompletes
)
)
Et voici l'appel a la fonction :
Hash::extract($suggestions, '{n}.Autocomplete.value')
Merci d'avance ;).
Chez moi ca fonctionne tres bien, exemple :
$test = $this->PremiumOffers
->find()
->hydrate(false)
->toArray();
$array = Hash::extract($test, '{n}.price');
//DEBUG
[
(int) 0 => (float) 3,
(int) 1 => (float) 8.5,
(int) 2 => (float) 16.5,
(int) 3 => (float) 32
]
Apres, effectivement leur exemple avec "$this->User->find("all")" ne fonctionne pas car ca renvoie un objet, et la fonction extract prend uniquement un array, je vais faire une PR pour le modifier.
Salut @Xeta et merci pour ta reponse ^^, mais j'ai essaye avec :
Hash::extract($suggestions, '{s}.Autocomplete.value');
et :
Hash::extract($suggestions->toArray(), '{s}.Autocomplete.value');
Et ca n'a pas marche.
ca n'as pas marche :
Hash::extract($suggestions->hydrate(false), '{s}.Autocomplete.value')
Error: Call to undefined method Cake\ORM\ResultSet::hydrate()
$suggestions = $this->Autocompletes->find()->where($conditions)->all()->hydrate(false);
// print '<pre>'; print_r($suggestions->toArray()); print '</pre>'; die();
die(json_encode(Hash::extract($suggestions, '{s}.Autocomplete.value')));
Et j'ai eu : Error: Call to undefined method Cake\ORM\ResultSet::hydrate()
Test ca :
$suggestions = $this->Autocompletes
->find()
->where($conditions)
->hydrate(false)
->all();
Et ca, si le premier fonctionne pas :
$suggestions = $this->Autocompletes
->find()
->where($conditions)
->hydrate(false)
->toArray();
Idem, marche pas, et en disant que ca ne marche pas, je veux dire que si je fait un print_r de $suggestions->toArray() j'ai les resultats, mais le debug de Hash::extract, retourne un tableau vide.
Meme avec :
$suggestions = $this->Autocompletes
->find()
->where($conditions)
->hydrate(false)
->toArray();
Bon, je vais faire des tests de mon coter alors, car j'ai jamais utiliser Hash. Je te tient au courant dans 5min.
@Xeta, oui effectivement chez moi ca marche aussi, mais avec :
Hash::extract($test, '{n}.value')
et non pas
Hash::extract($suggestions, '{n}.Autocomplete.value');
En tout cas merci pour ton aide ^^.
@Xeta, tu sait quoi, en fait, je n'ai meme pas plus besoin de Hash::extract() avec ->hydrate(false) sur les resultats :p.