Comment puis-je obtenir le premier élément de CakePHP 3 résultats d'objet
TLDR: Comment puis-je utiliser le premier élément dans un objet?
Après l'obtention de données de la base de données, je veux tirer le premier et utiliser séparément avant de répéter dans les autres vidéos. (Dans mon modèle/vue de fichier). Si c'était un tableau, je pourrais l'utiliser quelque chose comme array_shift
, mais jusqu'à présent, avec l'objet, je suis de retour à vide.
D'abord, j'ai données dans mon Contrôleur, et de passer à la Vue:
$videos = $this->Videos->find();
$this->set(compact('videos'));
Puis, dans la Vue (fichier de modèle), j'ai essayé ceci:
$featuredVideo = $videos{0};
Erreur Ne peut pas utiliser d'objet de type Cake\ORM\Query sous forme de tableau
Et ce:
$featuredVideo = $videos->0;
Error: syntax error, unexpected '0' (T_LNUMBER), s'attendant à identifier (T_STRING) ou variable (T_VARIABLE) ou '{' ou '$'
Et ce:
$featuredVideo = $videos->toArray()[0];
Cela fonctionne (un peu), mais puis-je utiliser $featuredVideo
comme un Tableau, qui est différente de partout ailleurs, et semble non élégant.
Et ce:
$featuredVideo = $videos->first();
C'est génial, mais il limite la totalité de l'objet uniquement à la première, donc je n'ai plus le reste de la vidéo.
Et ce:
$allVideos = $videos;
$featuredVideo = $videos->first();
Mais, apparemment, puisque c'est un objet, le $allVideos
est juste une référence à la $videos
, car ils sont tous deux se réduit à la première vidéo.
Je me rends compte cela semble être une question simple, et c'est probablement une réponse simple, mais j'ai regardé autour, et essayé les suggestions sur la façon d'obtenir le premier élément d'un objet avec les résultats ci-dessus.
OriginalL'auteur Dave | 2015-04-13
Vous devez vous connecter pour publier un commentaire.
Ce que je n'ai pas compris, c'est que
->find()
renvoie simplement l'objet de requête jusqu'à ce que vous dites à exécuter par le biais d'un->all()
ou un->first()
ou en l'exécutant à travers unforeach()
boucle.Donc, je n'arrivais pas à accéder à la première enfant de l'objet, car la requête n'avait pas encore été exécutée, pour montrer les résultats.
Et quand j'essayais de faire
->first()
après la définition de la variable ci-dessus, c'était en fait de l'exécution de la requête sur l'objet de requête après le réglage de la limite à 1, ce qui rend les deux ont seulement 1.Plus les détails ici.
La réponse (en code):
Plus de détails ici sur lorsque les objets de requête sont paresseusement évalué.
Grâce jose_zap et marc_ pour aider à clarifier cela pour moi.
OriginalL'auteur Dave