2015-03-29 6 views
0

Я только что начал объектно-ориентированное программирование в Symfony 2, и у меня возникла проблема с объединением таблиц mysql.Присоединиться к таблице в Symfony 2

У меня есть две таблицы:

kommuner: идентификатор, имя, емкость

Деятельность: идентификатор, имя, kommune_id

Как соединить эти таблицы в файлы сущностей?
Это моя функция контроллера по умолчанию:

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? Я ценю все виды помощи!

+0

Вы добавили объект Kommune 2 раза. –

+0

Хорошая точка! См. Edit –

+0

Вы читаете документы, которые я опубликовал в своем ответе? Если вам нужна помощь в выборе правильного типа ассоциации, вам необходимо обновить свой вопрос, добавив некоторую информацию о взаимоотношениях между этими объектами (что представляют собой эти сущности и как они взаимодействуют друг с другом). –

ответ

1

Вы должны выбрать правильный Doctrine Association Mapping в зависимости от отношений между этими объектами.

Другие ссылки полезные для чтения для вас:

Update на основе комментариев и после редактирования:

OneToMany - ManyToOne отношение может быть Unidirectional:

<?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; 

} 

Bidirectional Или:

Как сделали, @ISA Беком ответа

ПРИМЕЧАНИЕ: When mapping bidirectional associations it is important to understand the concept of the owning and inverse sides и помните, что вам не нужно, чтобы установить идентификатор объекта отношений, потому что доктрина обрабатывать это автоматически, как вы увидите после того, как отображения будет применяется с командой: $ php app/console doctrine:schema:update --force с вашей консоли.

+0

Привет! Я не уверен, какое отображение я должен использовать. Я попробовал первый (см. Править), но я не могу заставить его работать. –

+0

@ MathiasLund Ok! Теперь я обедаю, но после того, как я обновлю свой ответ :-) –

+0

Hi again :) Его странно, потому что когда я запускаю «$ php app/console doctrine: schema: update -force», он возвращает: «Ничего не обновлять - ваша база данных уже синхронизирована с текущими метаданными объекта. ". Это правильное поведение? –

0

Я полагаю, вы хотите использовать один ко многим отношений между 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 
    */ 
} 

Я думаю, эти коды будут полезны для вас.

+0

Хорошо, я сделал то, что вы сказали, но как я могу назвать это в своей функции? :) –

+0

Вы можете вызвать как '$ aktiviteter = $ this-> getDoctrine() -> getRepository ('YouBundleName: Aktiviteter') -> findAll();' –

Смежные вопросы