Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour,
J'ai un problème et je n'arrive pas à trouver de solution. J'ai une table "versions" liée à des "types" par l’intermédiaire d'une autre table ("Versionstypes"). Voilà les entités correspondantes :
[lang=php]
<?php
/**
* @ORM\Table(name="Versions")
* @ORM\Entity
*/
class Versions
{
/**
* @var integer @ORM\Column(name="IdVersion", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* @var \Doctrine\Common\Collections\Collection @ORM\OneToMany(targetEntity="\Entity\Versionstypes", mappedBy="version",cascade={"persist"})
*/
private $versionstypes;
}
/**
* @ORM\Table(name="Versionstypes")
* @ORM\Entity
*/
class Versionstypes
{
/**
* @var \Entity\Versions
* @ORM\ManyToOne(targetEntity="\Entity\Versions", inversedBy="versionstypes",cascade={"persist"})
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="IdVersion", referencedColumnName="IdVersion", nullable=false, onDelete="cascade")
* })
*/
private $version;
/**
* @var \Entity\Types
* @ORM\ManyToOne(targetEntity="\Entity\Types4decouv", inversedBy="versionstypes",cascade={"persist"})
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="IdType", referencedColumnName="IdType", nullable=false)
* })
*/
private $types;
/**
* @var string
*
* @ORM\Column(name="Texte", type="string", length=255, nullable=true)
*/
private $texte;
...
}
/**
* Types
*
* @ORM\Table(name="Types")
* @ORM\Entity
*/
class Types
{
/**
* @var integer
*
* @ORM\Column(name="IdType", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* @var \Doctrine\Common\Collections\Collection
*
* @ORM\OneToMany(targetEntity="\Entity\Versionstypes", mappedBy="types")
*/
private $versionstypes;
/**
* @ORM\Column(name="Affichetype1", type="boolean", options={"default":0})
*/
private $affichetype1;
/**
* @ORM\Column(name="Affichetype2", type="boolean", options={"default":0})
*/
private $affichetype2;
...
}Dans un formulaire qui édite une version je dois afficher :
- 1 fieldset qui contient le champ "texte" (de "Versionstypes") d'un certain "type" (ex : id = 1 et 2 et 3) lié à la version
- 1 fieldset qui contient le champ "texte" (de "Versionstypes") d'un certain "type" (ex : id = 3 et 4 et 5) lié à la version
Je suis donc parti sur un formulaire de ce genre mais ça n'affiche rien dans ma vue (ce qui est un peu logique pour le moment) :
[lang=php]
class EditVersionForm extends Form implements InputFilterProviderInterface
{
$this->add([
'type' => 'Zend\Form\Element\Collection',
'name' => 'versionstypestype1',
'options' => [
'count' => -1,
'should_create_template' => true,
'allow_add' => true,
'allow_remove' => true,
'template_placeholder' => '__placeholder__',
'target_element' =>new VersionsTypesFieldset($this->entityManager, 'type1'),
],
]);
$this->add([
'type' => 'Zend\Form\Element\Collection',
'name' => 'versionstypestype2',
'options' => [
'count' => -1,
'should_create_template' => true,
'allow_add' => true,
'allow_remove' => true,
'template_placeholder' => '__placeholder__',
'target_element' =>new VersionsTypesFieldset($this->entityManager, 'type2')
],
]);
...
}
class VersionsTypesFieldset extends Fieldset /*implements InputFilterProviderInterface */
{
public function __construct(EntityManager $entityManager, $name=null)
{
parent::__construct ( 'versionstypes4decouv'.$name );
$this->entityManager = $entityManager;
$hydrator = new DoctrineHydrator ( $this->entityManager );
// $hydrator->addStrategy('datedeb', new DateTimeStrategy);
// $hydrator->addStrategy('datefin', new DateTimeStrategy);
$this->setHydrator ( $hydrator )->setObject ( new Versionstypes());
$this->add ([
'type' => 'DoctrineModule\Form\Element\ObjectSelect',
'name' => 'type4decouvtype1',
'options' => [
'object_manager' => $this->entityManager,
'target_class' => '\Entity\Types',
'property' => 'nomtype4decouv',
'is_method' => true,
// 'find_method' => [
// 'name' => 'getType4DeCouvEdito',
// ],
'find_method' => [
'name' => 'findBy',
'params' => [
'criteria' => ['affichetype1'=>1],
'orderBy' => ['id' => 'ASC'],
],
],
'label' => ('Types de résumés'),
'label_attributes' => [
'class' => 'control-label'
],
'disable_inarray_validator' => true,
],
'attributes' => [
'id' => 'type2',
],
]);
$this->add ( array (
'type' => 'DoctrineModule\Form\Element\ObjectSelect',
'name' => 'type4decouvtype2',
'options' => array (
'object_manager' => $this->entityManager,
'target_class' => '\Entity\Types4decouv',
'property' => 'nomtype4decouv',
'is_method' => true,
// 'find_method' => array (
// 'name' => 'getType4DeCouvEdito',
// ),
'find_method' => array (
'name' => 'findBy',
'params' => array(
// Use key 'orderBy' if using ORM
'criteria' => array('affichetype2'=>1),
'orderBy' => array('id' => 'ASC'),
),
),
),
'attributes' => array (
'id' => 'type2',
)
) );
$this->add ( array (
'type' => 'Zend\Form\Element\Textarea',
'name' => 'texte',
'options' => array (
'label' => ('Texte'),
),
'attributes' => array (
//'required' => 'required',
'id' => 'texte',
)
) );
}
}En gros je voudrais bien arriver à faire ce genre de requête :
[lang=sql] SELECT VersionsTypes.Texte, Types.id FROM Versions INNER JOIN VersionsTypes ON Versions.Id = VersionsTypes.IdVersion INNER JOIN Types ON (Types.IdType = VersionsTypes.IdType AND Types.Affichetype1 = 1 /* ou 2 */ WHERE Versions.Id = 1
Je ne sais pas trop comment m'y prendre pour faire ça. Si quelqu'un a une idée je suis preneur.
Merci
Hors ligne