Я просто начал объектно-ориентированное программирование в Symfony 2, и у меня возникла проблема с объединением таблиц mysql.
У меня две таблицы:
kommuner : id, имя, емкость
Действия : id, name, kommune_id
Как присоединиться к этим таблицам в файлах сущностей?
Это моя функция в DefaultController:
public function aktiviteterAction() { $em = $this->get('doctrine.orm.default_entity_manager'); $aktiviteter = $em->getRepository(Aktiviteter::class)->findAll(); return $this->render('default/aktiviteter.html.twig', [ 'aktiviteter' => $aktiviteter, ]); }
и это моя сущность, Kommune.php:
<?php namespace AppBundle\Entity; use Doctrine\ORM\Mapping as ORM; /** * Kommune */ class Kommune { /** * @var integer */ private $id; /** * @var string */ private $name; /** * @var integer */ private $capacity; /** * Get id * * @return integer */ public function getId() { return $this->id; } /** * Set name * * @param string $name * @return Kommune */ public function setName($name) { $this->name = $name; return $this; } /** * Get name * * @return string */ public function getName() { return $this->name; } /** * Set capacity * * @param integer $capacity * @return Kommune */ public function setCapacity($capacity) { $this->capacity = $capacity; return $this; } /** * Get capacity * * @return integer */ public function getCapacity() { return $this->capacity; } }
и это мой объект Aktiviteter.php:
<?php namespace AppBundle\Entity; use Doctrine\ORM\Mapping as ORM; /** * Aktiviteter */ class Aktiviteter { /** * @var integer */ private $id; /** * @var string */ private $name; /** * @var integer */ private $kommuneId; /** * Get id * * @return integer */ public function getId() { return $this->id; } /** * Set name * * @param string $name * @return Aktiviteter */ public function setName($name) { $this->name = $name; return $this; } /** * Get name * * @return string */ public function getName() { return $this->name; } /** * Set kommuneId * * @param integer $kommuneId * @return Aktiviteter */ public function setKommuneId($kommuneId) { $this->kommuneId = $kommuneId; return $this; } /** * Get kommuneId * * @return integer */ public function getKommuneId() { return $this->kommuneId; } /** * @ManyToOne(targetEntity="Kommune") * @JoinColumn(name="kommune_id", referencedColumnName="id") **/ private $kommune; }
Может кто-нибудь объяснить, как эти таблицы объединяются в Symfony 2? Я ценю все виды помощи!
Вы должны выбрать правильное картографирование ассоциации доктрины в зависимости от отношения, которое вы хотите между этими объектами.
Другие ссылки, полезные для чтения для вас:
Обновление на основе комментариев и редактирования сообщений:
Отношение OneToMany – ManyToOne может быть однонаправленным :
<?php namespace AppBundle\Entity; use Doctrine\ORM\Mapping as ORM; /** * Aktiviteter */ class Aktiviteter { /** * @var integer */ private $id; /** * @var string */ private $name; /** * Get id * * @return integer */ public function getId() { return $this->id; } /** * Set name * * @param string $name * @return Aktiviteter */ public function setName($name) { $this->name = $name; return $this; } /** * Get name * * @return string */ public function getName() { return $this->name; } /** * @ManyToMany(targetEntity="Kommune") * @JoinTable(name="kommunes") **/ private $kommunes; }
Или двунаправленный :
Как сделал @ Isa Bek ответ
ПРИМЕЧАНИЕ . При сопоставлении двунаправленных ассоциаций важно понимать концепцию владения и обратной стороны и помнить, что вам не нужно устанавливать идентификатор объекта отношения, потому что Doctrine обрабатывает это автоматически, как вы увидите после того, как сопоставление будет применяться с команда: $ php app/console doctrine:schema:update --force
с вашей консоли.
Я полагаю, вы хотите использовать отношения один-много между объектами Kommune и Aktiviteler . В объекте Kommune.php:
/** * Kommune * * @ORM\Table() * @ORM\Entity */ class Kommune { /** * @var integer * * @ORM\Column(name="id", type="integer") * @ORM\Id * @ORM\GeneratedValue(strategy="AUTO") */ private $id; /** * @ORM\OneToMany(targetEntity="Aktiviteter", mappedBy="kommune") */ private $aktiviteler; /** * Other fields */ }
В объекте Aktiviteter.php
/** * Aktiviteter * * @ORM\Table() * @ORM\Entity */ class Aktiviteter { /** * @var integer * * @ORM\Column(name="id", type="integer") * @ORM\Id * @ORM\GeneratedValue(strategy="AUTO") */ private $id; /** * @ORM\ManyToOne(targetEntity="Kommune", inversedBy="aktiviteler") * @ORM\JoinColumn(name="kommune_id", referencedColumnName="id") */ private $kommune; /** * Other fields */ }
Я думаю, эти коды были бы полезны для вас.