Bonjour,

Je cherche deseperement à afficher mes images dans l'ordre des classes des élèves.

Mon entity Picture : | id | id_School | class | url

Je ne sais pas comment faire une requete doctrine pour afficher les infos classé par "class" ou si je peux le faire directement coté vue avec twig...

Pouvez vous m'aider s'il vous plait ?

6 réponses


Bonjour est ce que tu peux partager la version PHP de ton entity
Je crois bien qu'un nouvelle methode dans la PictureRepository pourrait tres bien faire l'affaire

Salut @Lilux
Dans le repository PictureRepostory

<?php
// src/Repository/PictureRepository.php

    public function getPictures()
    {
        $qb = $this->createQueryBuilder('p')->orderBy('p.class', 'ASC');

        return $qb->getQuery()->getResult();
    }
Lilux
Auteur

En faite je cherche plutot à faire un tableau comme cela :

'CP' : ['Eleve 1', 'Eleve 2'],
'CE1' : ['Eleve 3', 'Eleve 4', 'Eleve 5', 'Eleve 6'],
'CE2' : ['Eleve 7', 'Eleve 8', 'Eleve 9', 'Eleve 10']

si tu vois ce que je veux dire :)

Lilux
Auteur
<?php

namespace App\Entity;

use App\Repository\PictureRepository;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity(repositoryClass=PictureRepository::class)
 */
class Picture
{
    /**
     * @ORM\Id
     * @ORM\GeneratedValue
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @ORM\Column(type="string", length=255)
     */
    private $url;

    /**
     * @ORM\Column(type="boolean")
     */
    private $isConnect;

    /**
     * @ORM\ManyToOne(targetEntity=Shooting::class, inversedBy="pictures")
     */
    private $shooting;

    /**
     * @ORM\Column(type="string", length=100)
     */
    private $class;

    /**
     * @ORM\Column(type="string", length=10)
     */
    private $password;

    /**
     * @ORM\Column(type="datetime", nullable=true)
     */
    private $lastConnect;

    /**
     * @ORM\OneToMany(targetEntity=Order::class, mappedBy="picture")
     */
    private $orders;

    /**
     * @ORM\OneToMany(targetEntity=OrderDetails::class, mappedBy="picture")
     */
    private $orderDetails;

    public function __construct()
    {
        $this->orders = new ArrayCollection();
        $this->orderDetails = new ArrayCollection();
    }

    public function getId(): ?int
    {
        return $this->id;
    }

    public function getUrl(): ?string
    {
        return $this->url;
    }

    public function setUrl(string $url): self
    {
        $this->url = $url;

        return $this;
    }

    public function getIsConnect(): ?bool
    {
        return $this->isConnect;
    }

    public function setIsConnect(bool $isConnect): self
    {
        $this->isConnect = $isConnect;

        return $this;
    }

    public function getShooting(): ?Shooting
    {
        return $this->shooting;
    }

    public function setShooting(?Shooting $shooting): self
    {
        $this->shooting = $shooting;

        return $this;
    }

    public function getClass(): ?string
    {
        return $this->class;
    }

    public function setClass(string $class): self
    {
        $this->class = $class;

        return $this;
    }

    public function getPassword(): ?string
    {
        return $this->password;
    }

    public function setPassword(string $password): self
    {
        $this->password = $password;

        return $this;
    }

    public function getLastConnect(): ?\DateTimeInterface
    {
        return $this->lastConnect;
    }

    public function setLastConnect(?\DateTimeInterface $lastConnect): self
    {
        $this->lastConnect = $lastConnect;

        return $this;
    }

    /**
     * @return Collection|Order[]
     */
    public function getOrders(): Collection
    {
        return $this->orders;
    }

    public function addOrder(Order $order): self
    {
        if (!$this->orders->contains($order)) {
            $this->orders[] = $order;
            $order->setPicture($this);
        }

        return $this;
    }

    public function removeOrder(Order $order): self
    {
        if ($this->orders->removeElement($order)) {
            // set the owning side to null (unless already changed)
            if ($order->getPicture() === $this) {
                $order->setPicture(null);
            }
        }

        return $this;
    }

    /**
     * @return Collection|OrderDetails[]
     */
    public function getOrderDetails(): Collection
    {
        return $this->orderDetails;
    }

    public function addOrderDetail(OrderDetails $orderDetail): self
    {
        if (!$this->orderDetails->contains($orderDetail)) {
            $this->orderDetails[] = $orderDetail;
            $orderDetail->setPicture($this);
        }

        return $this;
    }

    public function removeOrderDetail(OrderDetails $orderDetail): self
    {
        if ($this->orderDetails->removeElement($orderDetail)) {
            // set the owning side to null (unless already changed)
            if ($orderDetail->getPicture() === $this) {
                $orderDetail->setPicture(null);
            }
        }

        return $this;
    }
}

Hello ,

Dans ton order tu peux ajouter plusieurs valeurs:

    ->orderBy('p.class, p.truc, p.order', 'ASC');

Par contre Eleve doit être sur une entity car je ne vois pas de relation ...

Bonjour,
Tes entités sont une représentation de tes objets.

J'aurai donc crée les entités suivantes :

  • Classe ( id, name, pictures, eleves(relation oneToMany)
  • Eleves (id, name, etcc, classe(ManyToOne)

à partir de là tu pourrais plus aisément récupérés chaque élèves par group de class.