Доктрина один ко многим, добавление нового объекта в массив массива не работает - PullRequest
0 голосов
/ 23 февраля 2019

Я пытаюсь создать ассоциацию «один ко многим / многие к одному» в доктрине Symfony3.4!я работаю над двумя объектами [Single и Many], «один» объект содержит объект «Many», а объект «Many» содержит массив массивов других объектов «singles».Я пытался создать новый экземпляр сингла и новый экземпляр многих, и я назначил множество сущностей на сингл, прежде чем я добавил много синглов во многие сущности, но проблема в том, когда я пытаюсь запросить все синглы, которые я получилсинглов не былоЭто мой Множественный объект``

namespace AjaxBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
* Many
*
* @ORM\Table(name="many")
* @ORM\Entity(repositoryClass="AjaxBundle\Repository\ManyRepository")
*/
 class Many
{
 /**
 * @var int
 *
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
  private $id;
  /**
   * @ORM\OneToMany( targetEntity="AjaxBundle\Entity\Single", 
     mappedBy="single",cascade={"persist"})
 * @var \Doctrine\Common\Collections\Collection
 */
   public $multi;

   /**
   * Get id
   *
   * @return int
 */
  public function getId()
  {
    return $this->id;
  }
/**
 * Constructor
 */
public function __construct()
{
    $this->multi = new \Doctrine\Common\Collections\ArrayCollection();
}

/**
 * Add multi
 *
 * @param \AjaxBundle\Entity\Single $multi
 *
 * @return Many
 */
public function addMulti(\AjaxBundle\Entity\Single $multi)
{
    $this->multi[] = $multi;
    return $this;
}

/**
 * Remove multi
 *
 * @param \AjaxBundle\Entity\Single $multi
 */
public function removeMulti(\AjaxBundle\Entity\Single $multi)
{
    $this->multi->removeElement($multi);
}

/**
 * Get multi
 *
 * @return \Doctrine\Common\Collections\Collection
 */
public function getMulti()
{
    return $this->multi;
}

}

А это мой Единый объект

namespace AjaxBundle\Repository;


/**
* SingleRepository
*
* This class was generated by the Doctrine ORM. Add your own custom
* repository methods below.
*/
use AjaxBundle\Entity\Single;
use Doctrine\ORM\EntityNotFoundException;
use Doctrine\ORM\NonUniqueResultException;
use Doctrine\ORM\NoResultException;
use Doctrine\ORM\Query;
class SingleRepository extends \Doctrine\ORM\EntityRepository
{
public function fetch($id)
{
    $manager=$this->getEntityManager();
    $query=$manager->createQuery("SELECT u from AjaxBundle:Single u WHERE 
    u.id='$id'");
    try{
    return $query->getSingleResult(Query::HYDRATE_SIMPLEOBJECT);}
    catch (NoResultException $xx)
    {
    die("impossible");
    }
    catch (NonUniqueResultException $zz)
    {
        die("impossible");
    }
  }
 }

Это контроллер (Ради тестирования)

   public function showFriendAction()
   {
      $manager=$this->getDoctrine()->getManager();
    $object2=$manager->getRepository(Single::class)->fetch(5);
    $object3=$manager->getRepository(Single::class)->fetch(6);
    $many=new Many();
    $many->addMulti($object2);
    $many->addMulti($object3);
    $single=new Single();
    $single->setNom("Somename");
    $single->single=$many;
    $manager->persist($many);
    $manager->persist($single);
    $manager->flush();
    return new Response("");

}

Иэто выборка, которую я создал, чтобы получить одиночные объекты (чтобы добавить их в мульти-массив)

        public function fetch($id)
       {
        $manager=$this->getEntityManager();
          $query=$manager->createQuery("SELECT u from AjaxBundle:Single u 
         WHERE 
           u.id='$id'");
       try{
         return $query->getSingleResult(Query::HYDRATE_SIMPLEOBJECT);}
       catch (NoResultException $xx)
      {
       die("impossible");
       }
       catch (NonUniqueResultException $zz)
       {
        die("impossible");
         }
     }

Это мой файл ветки для проверки результата

   <html>
   <head></head>
  <body>
  <center>
    {% for x in data %}
   <ul>{{ x.nom }}</ul>
   {% if  x.id==9%}
    {% for m in x.single %}
     <h2>{{m.multi.nom}}</h2>
    {% endfor %}
      {% endif %}
    {% endfor %}
  </center>
    </body>
     </html>

Любойможно мне показать, как решить проблему?Большое спасибо

...