Я пытаюсь сделать так, чтобы я мог видеть все заказы в базе данных.Но дело в том, что в одном заказе больше продуктов, и я показываю только ряд по каждому продукту.Как на картинке здесь:
Я пытался переместить цикл for, но безуспешно.Я надеюсь, что вы, ребята, можете мне помочь.
Форма веточки:
{% extends 'layout/default.html.twig' %}
{% block title %}Inkoper - Lunenburg{% endblock %}
{% block content %}
<div>
<p></p>
</div>
<div class="container-fluid">
<div class="row">
<div class="col-md-12">
<table class="table table-striped">
<thead>
<tr>
<th scope="col">Bestelordernummer</th>
<th scope="col">Artikelnummer</th>
<th scope="col">Omschrijving</th>
<th scope="col">Aantal</th>
<th scope="col">Leverancier</th>
<th scope="col">Magazijnlocatie</th>
<th scope="col">Keuringseisen</th>
<th></th>
</tr>
</thead>
<tbody>
{% for bestelling in bestellingen %}
{% for bestelregel in bestelling.bestelregels %}
<tr>
<th scope="row">{{ bestelling.bestelordernummer }}</th>
<td>{{ bestelregel.artikel.artikelnummer }}</td>
<td>{{ bestelregel.artikel.omschrijving }}</td>
<td>{{ bestelregel.aantal }}</td>
<td>{{ bestelling.leverancier }}</td>
<td>{{ bestelregel.artikel.magazijnlocatie }}</td>
<td>{{ bestelling.keuringseisen }}</td>
<td><a class="btn btn-sm btn-primary" href="{{ path('bestellingwijzigen', {'bestelling':bestelling.bestelordernummer}) }}">Wijzigen</a></td>
<td>
</tr>
{% endfor %}
{% endfor %}
</tbody>
</table>
</div>
</div>
<hr>
</div>
{% endblock %}
Entity Artikel
<?php
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
use Symfony\Component\Security\Core\User\UserInterface;
use Doctrine\Common\Collections\ArrayCollection;
/**
* Artikel
*
* @ORM\Table(name="artikel")
* @ORM\Entity(repositoryClass="AppBundle\Repository\ArtikelRepository")
*/
class Artikel
{
//Mapping naar de database
/**
* @var string
*
* @ORM\Column(name="artikelnummer", type="integer", length=20, unique=true)
* @ORM\Id
* @Assert\Length(
* min = 10,
* max = 10,
* minMessage = "Minimaal 10 karakters",
* maxMessage = "Maximaal 10 karakters"
*)
*/
private $artikelnummer;
/**
* @var string
*
* @ORM\Column(name="omschrijving", type="string", length=255, nullable=true)
*/
private $omschrijving;
/**
* @var string
*
* @ORM\Column(name="specificaties", type="string", length=255, nullable=true)
*/
private $specificaties;
/**
* @var string
*
* @ORM\Column(name="Magazijnlocatie", type="string", length=6)
* @Assert\Regex(
* pattern = "/^20|[0-1]{1}[0-9]{1}\/[A-Z][0]{1}[0-9]{1}|10$/i",
* match=true,
* message="Ongeldige locatie [ERROR1]")
* @Assert\Regex(
* pattern = "/^[2]{1}[1-9]{1}\/[A-Z]{1}[0-9]{1}$/i",
* match=false,
* message="Ongeldige locatie [ERROR2]")
* @Assert\Regex(
* pattern = "/^[3-9]{1}[0-9]{1}\/[A-Z][0-9]{1}$/i",
* match=false,
* message="Ongeldige locatie [ERROR3]")
* @Assert\Regex(
* pattern = "/^[0-1]{1}[0-9]{1}\/[A-Z][1]{1}[1-9]{1}$/i",
* match=false,
* message="Ongeldige locatie [ERROR4]")
* @Assert\Regex(
* pattern = "/^[0-1]{1}[0-9]{1}\/[A-Z][2-9]{1}[0-9]{1}$/i",
* match=false,
* message="Ongeldige locatie [ERROR5]")
* @Assert\Regex(
* pattern = "/^[0-9A-Za-z]+$/i",
* match=false,
* message="Ongeldige locatie [ERROR6]")
* @Assert\Length(
* max = 6,
* maxMessage = "Mag niet meer zijn dan {{ limit }} karakters"
* )
*/
private $magazijnlocatie;
/**
* @var decimal
*
* assert
* @ORM\Column@Column(type="decimal", precision= 10, scale=2, nullable=true)
*/
private $inkoopprijs;
/**
* @var string
*
* @ORM\Column(name="vervangendArtikel", type="string", length=255, nullable=true)
*/
private $vervangendArtikel;
/**
* @var integer
*
* @ORM\Column(name="minimumVoorraad", type="integer", length=20, nullable=true)
*/
private $minimumVoorraad;
/**
* @var integer
*
* @ORM\Column(name="voorraadaantal", type="integer", length=20, nullable=true)
*/
private $voorraadaantal;
/**
* @var integer
*
* @ORM\Column(name="bestelserie", type="integer", length=20, nullable=true)
*/
private $bestelserie;
/**
* @var integer
*
* @ORM\Column(name="verkopen", type="integer", length=20, nullable=true)
*/
private $verkopen;
/**
* @var integer
*
* @ORM\Column(name="gereserveerdeVoorraad", type="integer", length=10, nullable=true)
*/
private $gereserveerdeVoorraad;
/**
* @var integer
*
* @ORM\Column(name="vrijeVoorraad", type="integer", length=10, nullable=true)
*/
private $vrijeVoorraad;
/**
* @var bool
*
* @ORM\Column(name="in_voorraad", type="boolean")
*/
private $inVoorraad;
/**
* @ORM\OneToMany(targetEntity="Bestelregel", mappedBy="artikel")
*/
private $bestelregels;
public function __construct()
{
$this->bestelregels = new ArrayCollection();
}
//**************************************************Set/Get Functies hieronder!*********************************
/**
* @param mixed $bestelregels
*/
public function setBestelregels($bestelregels)
{
$this->bestelregels = $bestelregels;
}
/**
* @return mixed
*/
public function getBestelregels()
{
return $this->bestelregels;
}
/**
* Set artikelnummer
*
* @param string $artikelnummer
*
* @return Artikel
*/
public function setArtikelnummer($artikelnummer)
{
$this->artikelnummer = $artikelnummer;
return $this;
}
/**
* Get artikelnummer
*
* @return string
*/
public function getArtikelnummer()
{
return $this->artikelnummer;
}
/**
* Set omschrijving
*
* @param string $omschrijving
*
* @return Artikel
*/
public function setOmschrijving($omschrijving)
{
$this->omschrijving = $omschrijving;
return $this;
}
/**
* Get omschrijving
*
* @return string
*/
public function getOmschrijving()
{
return $this->omschrijving;
}
/**
* Set specificaties
*
* @param string $specificaties
*
* @return Artikel
*/
public function setSpecificaties($specificaties)
{
$this->specificaties = $specificaties;
return $this;
}
/**
* Get specificaties
*
* @return string
*/
public function getSpecificaties()
{
return $this->specificaties;
}
/**
* Set magazijnlocatie
*
* @param string $magazijnlocatie
*
* @return Artikel
*/
public function setMagazijnlocatie($magazijnlocatie)
{
$this->magazijnlocatie = $magazijnlocatie;
return $this;
}
/**
* Get magazijnlocatie
*
* @return string
*/
public function getMagazijnlocatie()
{
return $this->magazijnlocatie;
}
/**
* Set inkoopprijs
*
* @param decimal $inkoopprijs
*
* @return Artikel
*/
public function setInkoopprijs($inkoopprijs)
{
$this->inkoopprijs = $inkoopprijs;
return $this;
}
/**
* Get inkoopprijs
*
* @return decimal
*/
public function getInkoopprijs()
{
return $this->inkoopprijs;
}
/**
* Set vervangendArtikel
*
* @param string $vervangendArtikel
*
* @return Artikel
*/
public function setVervangendartikel($vervangendeArtikel)
{
$this->vervangendArtikel = $vervangendArtikel;
return $this;
}
/**
* Get vervangendArtikel
*
* @return string
*/
public function getVervangendartikel()
{
return $this->vervangendArtikel;
}
/**
* Set minimumVoorraad
*
* @param integer $minimumVoorraad
*
* @return Artikel
*/
public function setMinimumvoorraad($minimumVoorraad)
{
$this->minimumVoorraad = $minimumVoorraad;
return $this;
}
/**
* Get minimumVoorraad
*
* @return integer
*/
public function getMinimumvoorraad()
{
return $this->minimumVoorraad;
}
/**
* Set voorraadaantal
*
* @param integer $voorraadaantal
*
* @return Artikel
*/
public function setVoorraadaantal($voorraadaantal)
{
$this->voorraadaantal = $voorraadaantal;
return $this;
}
/**
* Get voorraadaantal
*
* @return integer
*/
public function getVoorraadaantal()
{
return $this->voorraadaantal;
}
/**
* Set bestelserie
*
* @param integer $bestelserie
*
* @return Artikel
*/
public function setBestelserie($bestelserie)
{
$this->bestelserie = $bestelserie;
}
/**
* Get bestelserie
*
* @return integer
*/
public function getBestelserie()
{
return $this->bestelserie;
}
/**
* Set verkopen
*
* @param integer $verkopen
*
* @return Verkopen
*/
public function setVerkopen($verkopen)
{
$this->verkopen= $verkopen;
return $this;
}
/**
* Get verkopen
*
* @return integer
*/
public function getVerkopen()
{
return $this->verkopen;
}
/**
* Set gereserveerdeVoorraad
*
* @param integer $gereserveerdeVoorraad
*
*/
public function setGereserveerdevoorraad($gereserveerdeVoorraad)
{
$this->gereserveerdeVoorraad= $gereserveerdeVoorraad;
return $this;
}
/**
* Get gereserveerdeVoorraad
*
* @return integer
*/
public function getGereserveerdevoorraad()
{
return $this->gereserveerdeVoorraad;
}
/**
* Set vrijeVoorraad
*
* @param integer $vrijeVoorraad
*
* @return Artikel
*/
public function setVrijevoorraad($vrijeVoorraad)
{
$this->vrijeVoorraad= $vrijeVoorraad;
return $this;
}
/**
* Get vrijeVoorraad
*
* @return integer
*/
public function getVrijevoorraad()
{
return $this->vrijeVoorraad;
}
/**
* @return bool
*/
public function getInVoorraad()
{
return $this->inVoorraad;
}
/**
* @param bool $inVoorraad
*/
public function setInVoorraad($inVoorraad)
{
$this->inVoorraad = $inVoorraad;
}
}
Entity Bestelling
<?php
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
use Symfony\Component\Security\Core\User\UserInterface;
use Symfony\Component\Validator\Constraints as Assert;
/**
* Bestelling
*
* @ORM\Table(name="bestelling")
* @ORM\Entity(repositoryClass="AppBundle\Repository\BestellingRepository")
*/
class Bestelling
{
/**
* @var int
*
* @ORM\Column(name="bestelordernummer", type="integer", unique=true)
* @ORM\Id
*/
private $bestelordernummer;
/**
* @var string
*
* @ORM\Column(name="leverancier", type="string", length=6, nullable=true)
* @Assert\Length(
* min = 1,
* max = 6,
* minMessage = "Minimaal 1 karakters",
* maxMessage = "Maximaal 6 karakters"
*)
*/
private $leverancier;
/**
* @var int
*
* @ORM\Column(name="keuringseisen", type="integer", length=4, nullable=true)
*/
private $keuringseisen;
/**
* @ORM\OneToMany(targetEntity="Bestelregel", mappedBy="bestelling", cascade={"persist"})
*/
private $bestelregels;
public function __construct()
{
$this->bestelregels = new ArrayCollection();
}
/**
* @param mixed $bestelregels
*/
public function setBestelregels($bestelregels)
{
$this->bestelregels = $bestelregels;
}
/**
* @return mixed
*/
public function getBestelregels()
{
return $this->bestelregels;
}
/**
* Set bestelordernummer
*
* @param integer $bestelordernummer
*
* @return Bestelling
*/
public function setBestelordernummer($bestelordernummer)
{
$this->bestelordernummer = $bestelordernummer;
return $this;
}
/**
* Get bestelordernummer
*
* @return integer
*/
public function getBestelordernummer()
{
return $this->bestelordernummer;
}
/**
* Set leverancier
*
* @param string $leverancier
*
* @return Bestelling
*/
public function setLeverancier($leverancier)
{
$this->leverancier = $leverancier;
return $this;
}
/**
* Get leverancier
*
* @return string
*/
public function getLeverancier()
{
return $this->leverancier;
}
/**
* Set keuringseisen
*
* @param integer $keuringseisen
*
* @return Bestelling
*/
public function setKeuringseisen($keuringseisen)
{
$this->keuringseisen = $keuringseisen;
return $this;
}
/**
* Get keuringseisen
*
* @return integer
*/
public function getKeuringseisen()
{
return $this->keuringseisen;
}
}
Entity Bestelregel(присоединиться к столу)
<?php
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* Bestelregel
*
* @ORM\Table(name="bestelregel")
* @ORM\Entity(repositoryClass="AppBundle\Repository\BestelregelRepository")
*/
class Bestelregel
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\ManyToOne(targetEntity="Artikel", inversedBy="bestelregels")
* @ORM\JoinColumn(name="artikelnummer", referencedColumnName="artikelnummer")
*/
private $artikel;
/**
* @ORM\ManyToOne(targetEntity="Bestelling", inversedBy="bestelregels")
* @ORM\JoinColumn(name="bestelordernummer", referencedColumnName="bestelordernummer")
*/
private $bestelling;
/**
* @ORM\Column(name="aantal", type="integer")
*/
private $aantal;
/**
* @return mixed
*/
public function getArtikel()
{
return $this->artikel;
}
/**
* @param mixed $artikel
*/
public function setArtikel($artikel)
{
$this->artikel = $artikel;
}
/**
* @return mixed
*/
public function getBestelling()
{
return $this->bestelling;
}
/**
* @param mixed $bestelling
*/
public function setBestelling($bestelling)
{
$this->bestelling = $bestelling;
}
/**
* Set id
*
* @param integer $id
*
* @return Bestelregel
*/
public function setId($id)
{
$this->id = $id;
return $this;
}
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* @return mixed
*/
public function getAantal()
{
return $this->aantal;
}
/**
* @param mixed $aantal
*/
public function setAantal($aantal)
{
$this->aantal = $aantal;
}
}
Контроллер
<?php
//Namespace en uses, mag je vergeten. Moet er wel in staan!
namespace AppBundle\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use AppBundle\Entity\Bestelregel;
use AppBundle\Entity\Bestelling;
use AppBundle\Form\Type\BestellingType;
use AppBundle\Form\Type\BestelregelType;
use AppBundle\Entity\Artikel;
use AppBundle\Form\Type\ArtikelType;
class BestellingController extends Controller
{
//Functie om als inkoper alle bestelopdrachten te kunnen zien
/**
* @Route ("/inkoper/bestelopdrachten/", name="allebestelopdrachten")
*/
public function alleBestelopdrachten(Request $request){
$bestellingen = $this->getDoctrine()->getRepository("AppBundle:Bestelling")->findAll();
//Verwijzing naar formulier
return $this->render('inkoper/bestelregel.html.twig', [
'bestellingen' => $bestellingen
]);
}
//Functie om als inkoper een nieuwe bestelling te kunnen maken
/**
* @Route("/inkoper/bestelling/nieuw", name="bestellingnieuw")
*/
public function nieuweBestelling (Request $request) {
$nieuweBestelling = new Bestelling();
$form = $this->createForm(BestellingType::class, $nieuweBestelling);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
foreach ($nieuweBestelling->getBestelregels() as $bestelregel) {
$bestelregel->setBestelling($nieuweBestelling);
}
$em = $this->getDoctrine()->getManager();
$em->persist($nieuweBestelling);
$em->flush();
return $this->redirect($this->generateurl("allebestelopdrachten"));
}
//Verwijzing naar formulier
return $this->render('inkoper/form.bestelling.html.twig', [
'form' => $form->createView(),
'title' => 'Bestelling toevoegen',
]);
}
//Als inkoper een bestelling kunnen wijzigen.
/**
* @Route("/inkoper/bestelling/wijzigen/{bestelling}", name="bestellingwijzigen")
*/
public function editBestelling (Request $request, $bestelling) {
$bestaandeBestelling = $this->getDoctrine()->getRepository("AppBundle:Bestelling")->find($bestelling);
$form = $this->createForm(BestellingType::class, $bestaandeBestelling);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
foreach ($bestaandeBestelling->getBestelregels() as $bestelregel) {
$bestelregel->setBestelling($bestaandeBestelling);
}
$em = $this->getDoctrine()->getManager();
$em->persist($bestaandeBestelling);
$em->flush();
return $this->redirect($this->generateurl("allebestelopdrachten"));
}
//Verwijzing naar formulier
return $this->render('inkoper/form.bestelling.html.twig', [
'form' => $form->createView(),
'title' => 'Bestelling wijzigen',
]);
}
}
Заранее спасибо!