Bonjour
Depuis deux jours je suis bloqué sur une parti d'aun projet de gestion commandes.
Mes deux entity concerné :
ExBesoin.php
<?php
namespace App\Entity;
use App\Repository\ExBesoinRepository;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
/**
* @ORM\Entity(repositoryClass=ExBesoinRepository::class)
*/
class ExBesoin
{
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="date")
*/
private $date_emis;
/**
* @ORM\Column(type="date", nullable=true)
*/
private $dateLivraison;
/**
* @ORM\Column(type="text", nullable=true)
*/
private $note;
/**
* @ORM\Column(type="string", length=100)
*/
private $accord;
/**
* @ORM\ManyToOne(targetEntity=Labo::class, inversedBy="exBesoins")
*/
private $labo;
/**
* @ORM\OneToMany(targetEntity=BesoinAr::class, mappedBy="exBesoin", cascade={"persist", "remove"})
* @ORM\JoinColumn(name="ex_besoin_id", referencedColumnName="id")
*/
private $besoinArs;
public function __construct()
{
$this->besoinArs = new ArrayCollection();
}
public function getId(): ?int
{
return $this->id;
}
public function getDateEmis(): ?\DateTimeInterface
{
return $this->date_emis;
}
public function setDateEmis(\DateTimeInterface $date_emis): self
{
$this->date_emis = $date_emis;
return $this;
}
public function getDateLivraison(): ?\DateTimeInterface
{
return $this->dateLivraison;
}
public function setDateLivraison(\DateTimeInterface $dateLivraison): self
{
$this->dateLivraison = $dateLivraison;
return $this;
}
public function getNote(): ?string
{
return $this->note;
}
public function setNote(string $note): self
{
$this->note = $note;
return $this;
}
public function getAccord(): ?string
{
return $this->accord;
}
public function setAccord(string $accord): self
{
$this->accord = $accord;
return $this;
}
public function getLabo(): ?Labo
{
return $this->labo;
}
public function setLabo(?Labo $labo): self
{
$this->labo = $labo;
return $this;
}
/**
* @return Collection|BesoinAr[]
*/
public function getBesoinArs(): Collection
{
return $this->besoinArs;
}
public function addBesoinAr(BesoinAr $besoinAr): self
{
if (!$this->besoinArs->contains($besoinAr)) {
$this->besoinArs[] = $besoinAr;
$besoinAr->setExBesoin($this);
}
return $this;
}
public function removeBesoinAr(BesoinAr $besoinAr): self
{
if ($this->besoinArs->removeElement($besoinAr)) {
// set the owning side to null (unless already changed)
if ($besoinAr->getExBesoin() === $this) {
$besoinAr->setExBesoin(null);
}
}
return $this;
}
}
BesoinAr.php
<?php
namespace App\Entity;
use App\Repository\BesoinArRepository;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity(repositoryClass=BesoinArRepository::class)
*/
class BesoinAr
{
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="string", length=100)
*/
private $quantity;
/**
* @ORM\ManyToOne(targetEntity=UnityAr::class, inversedBy="articles")
*/
private $unity;
/**
* @ORM\ManyToOne(targetEntity=Article::class, inversedBy="besoinArs")
*/
private $article;
/**
* @ORM\ManyToOne(targetEntity=ExBesoin::class, inversedBy="besoinArs", cascade={"persist", "remove"})
* @ORM\JoinColumn(name="ex_besoin_id", referencedColumnName="id")
*/
private $exBesoin;
public function getId(): ?int
{
return $this->id;
}
public function getQuantity(): ?string
{
return $this->quantity;
}
public function setQuantity(string $quantity): self
{
$this->quantity = $quantity;
return $this;
}
public function getUnity(): ?UnityAr
{
return $this->unity;
}
public function setUnity(?UnityAr $unity): self
{
$this->unity = $unity;
return $this;
}
public function getArticle(): ?Article
{
return $this->article;
}
public function setArticle(?Article $article): self
{
$this->article = $article;
return $this;
}
public function getExBesoin(): ?ExBesoin
{
return $this->exBesoin;
}
public function setExBesoin(?ExBesoin $exBesoin): self
{
$this->exBesoin = $exBesoin;
return $this;
}
}
ExBesoinRepository.php
la partie concerné
/**
* @return ExBesoin[] Returns an array of ExBesoin objects
*/
public function selectBesoin(FiltreBesoin $filtre)
{
$query = $this->createQueryBuilder('p');
$query = $query
->select('b', 'sum(b.quantity) as qte')
->from(BesoinAr::class, 'b' )
->groupBy('b.unity', 'b.article')
;
return $query
->getQuery()->getResult();
}
le controleur
BesoinController.php
/**
* @Route("/commande", name="commande_all", methods={"GET"})
*/
public function commande(ExBesoinRepository $exBesoinRepository, Request $request): Response
{
$besoin = $exBesoinRepository->findFiltre();*/
return $this->render('admin/besoin/showAll.html.twig', [
'besoin' => $besoin,
]);
}
Ma vue
showAll.html.twig
<table class="table table-striped">
<thead class="bg-light">
<tr>
<th class="">Article</th>
<th>Catégorie</th>
<th class="center">unité</th>
</tr>
</thead>
{% for besoins in besoin %}
{% for article in besoins.getBesoinArs() %}
<tbody>
<tr>
<th>{{ article.article }}</th>
<td>{{ article.article.getCategory() }}</td>
<td>{{ article.unity }}</td>
</tr>
</tbody>
{% endfor %}
<tfoot>
<th></th>
<th style="color:red"> Totale Quantité</th>
<th style="color:red">{{ besoins.qte }}</th>
</tfoot>
{% endfor %}
</table>
L'objectif c'est d'afficher toutes les articles commandé sur differents bons de commandes par nom d'article et on prenons en compte l'unité (Kg) et avoir un total de quantité pour chaque article.
je ne sais pas si j'ètais assez claire dans mes explications.
Je ne sais pas si ma requette est correcte dans ce que je veux afficher, elle me retourne l'erreur :
Impossible to invoke a method ("getBesoinArs") on an array.
sur la ligne :
{% for article in besoins.getBesoinArs() %}
Je vous remercie d'avance pour votre aide.