Ich möchte kein Produkt auf meiner Indexseite anzeigen, wenn die Menge dieses Produkts gleich 1 ist. Die Menge des Produkts wird in der Tabelle Menge gespeichert. Die Tischmenge ist Link zum Produkt (ManyToOne).Eine Join-Abfrage mit Doctrine Query Builder ausführen
Das habe ich gemacht.
public function product($id)
{
$query = $this->createQueryBuilder('e')
->leftJoin('e.quantity', 'r')
->where('r.quantity = :id')
->setParameter('id', $id)
->getQuery();
return $query->getResult();
}
Menge
/**
* @var integer
*
* @ORM\Column(name="id", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\ManyToOne(targetEntity="Post", cascade={"remove"})
* @ORM\JoinColumn(name="product_id", referencedColumnName="id")
*/
protected $desk2;
/**
* @var integer
* @ORM\Column(name="quantity", type="integer", nullable=true)
*/
protected $quantity;
Produkt
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="telephone", type="string", length=30)
*/
private $telephone;
/**
* @var string
*
* @ORM\Column(name="name", type="string", length=125)
*/
private $name;
/**
* @var string
*
* @ORM\Column(name="description", type="text" , length=125)
*/
private $description;
Index
public function indexvAction($id)
{
$session = $this->getRequest()->getSession();
$em = $this->getDoctrine()->getManager();
$findEntities = $em->getRepository('FLYBookingsBundle:Post')->product($id);
$entity = $this->get('knp_paginator')->paginate($findEntities, $this->get('request')->query->get('page', 1), 9
);
if ($session->has('cart'))
$cart = $session->get('cart');
else
$cart = false;
return $this->render('FLYBookingsBundle:Post:indexv.html.twig', array('entity' => $entity,
'cart' => $cart));
}
EDIT:
default: index.html.twig
{% extends "::base.html.twig" %}
{% block newadvert %}
<div class="span4 offset1">
</div>
{{ render(controller('FLYBookingsBundle:Post:indexv')) }}
{% endblock newadvert %}
Controller:
public function indexAction()
{
return $this->render('FLYPlatformBundle:Default:index.html.twig');
}
Vielen Dank für Ihre Antwort. Ich habe versucht, was Sie vorgeschlagen, aber ich habe diesen Fehler: 'Eine Ausnahme wurde beim Rendern einer Vorlage geworfen (" Controller "FLY \ BookingsBundle \ Controller \ PostController :: indexvAction()" erfordert, dass Sie einen Wert für die " $ quantityLimit "Argument (weil es keinen Standardwert gibt oder weil hinter diesem ein nicht optionales Argument steht).") in FLYPlattformBundle: Standard: index.html.twig in Zeile 5. "Ich habe meinen Beitrag oben mit dem Standard aktualisiert index.html.twig – Sirius
Sie müssen den Parameter quantityLimit an Ihre indexvAction übergeben - das ist kein Problem mit der Abfrage, nur wie Sie Ihre Route aufrufen. Siehe http://symfony.com/doc/current/book/routing.html#routing-with-placeholders und stellen Sie sicher, dass Sie Ihre Controller-Methode korrekt aufrufen. Z.B. http://yoursite.com/yourproductroute/1 - oder so ähnlich. – Richard
Ich übergebe bereits den Parameter quantityLimit in meinem indexvAction. Die Seite indexv.html.twig wird in der Seite index.html.twig dargestellt. Und ich denke, das Problem kommt von dieser Zeile: '{{render (Controller ('FLYBookingsBundle: Post: indexv'))}}' – Sirius