2014-10-10 4 views
0

Я действительно новичок в Symfony, поэтому я извиняюсь в продвинутом, если это звучит глупо, и я буду очень признателен, если кто-то исправит мое понимание.создание нескольких отношений onetoMany в Sumfony 2.5

Я читаю о Databases and Doctrine, и, читая, я подумал, почему бы не создать приманное приложение для блога, чтобы практиковать.

Фиктивная блог приложение я работаю над очень просто, всего три таблицы и ее сущность

  • пост (где посты блога идут) его Entity является Entity/Post.php,
  • комментарии (куда отправлять комментарии идут) его Entity является Entity/comments.php
  • категория (где почтовые категории идут) его Entity является Entity/Category.php.

Я могу получить сообщение/категорию/комментарии, чтобы сохранить, показать, обновить, удалить все, что работает нормально.

Теперь я работаю над тем, когда отображается блог, его категория отображается как число (идентификатор категории), поэтому я пытаюсь связать стол столбец с таблицей категорий, чтобы отображать название категории, а не число.

Вопрос 1, Поскольку сообщение также связано с таблицей комментариев, и мне нужно связать одну и ту же таблицу сообщений с таблицей категорий, можем ли мы сделать это внутри Entity/Post.php?

class Post 
{ 
    /** 
    * @ORM\OneToMany(targetEntity="Comments", mappedBy="post") 
    */ 

    /** 
    * @ORM\ManyToOne(targetEntity="Category", inversedBy="post") 
    * @ORM\JoinColumn(name="category", referencedColumnName="id") 
    */ 
    protected $comment; 
    protected $categories; 

Если нет, то каков правильный способ обработки этих отношений?

Вопрос 2, Во время чтения "Fetching Related Objects", кажется, что я должен быть в состоянии получить категорию имя мое делает следующее

$posts = $this->getDoctrine()->getRepository('BlogBundle:Post')->findBy(array('category' => $id), array('id' => 'DESC')); 
$category_name = $posts->getCategory(); 

, но это дает мне ошибку

Error: Call to a member function getCategory() on a non-object in 

Я могу подтвердить, что этот метод getCategory() существует в Post субъекте

Я буду очень признателен за любую помощь здесь.

ответ

2

Вопрос 1

Аннотации прекрасно, но вы должны написать их прямо на верхней части собственности, которой они принадлежат, в противном случае они игнорируются:

class Post 
{ 
    /** 
    * @ORM\OneToMany(targetEntity="Comment", mappedBy="post") 
    */ 
    protected $comments; 

    /** 
    * @ORM\ManyToOne(targetEntity="Category", inversedBy="posts") 
    * @ORM\JoinColumn(name="category", referencedColumnName="id") 
    */ 
    protected $category; 

    public function __constructor() 
    { 
     $this->comments = new ArrayCollection(); 
    } 

    // ... 
} 

Make Shure у вас есть Правильный набор копий в других организациях:

class Category 
{ 
    /** 
    * @ORM\OneToMany(targetEntity="Post", mappedBy="category") 
    */ 
    protected $posts; 

    public function __constructor() 
    { 
     $this->posts = new ArrayCollection(); 
    } 

    // ... 
} 

class Comment 
{ 
    /** 
    * @ORM\ManyToOne(targetEntity="Post", inversedBy="comments") 
    * @ORM\JoinColumn(name="post", referencedColumnName="id") 
    */ 
    protected $post; 

    // ... 
} 

Обратите внимание, что я изменил какое-то единственное/множественное число свойств и Comments класс name. Должен быть более интуитивным.

Вопрос 2

findBy возвращает массив найденных объектов, даже если только один объект был найден. Используйте либо findOneBy, либо внесите свой результат.

+0

Спасибо за подтверждение того, что аннотации в порядке и исправления, что они должны быть на вершине собственности, я все еще чувствую, что что-то не так с аннотациями, поскольку у меня есть ощущение, что он не соединяется с двумя таблицами, я смотрю на свои mysql и я не вижу никакого внешнего ключа, я запускал 'php app/console doctrine: schema: update -force' после установки аннотаций – Baig

+0

@Baig Я добавил классы для' Category' и 'Comment', возможно, теперь яснее ? – SBH

+0

Спасибо, это устранило проблему с вопросом 1, однако я до сих пор неясно, в чем проблема с вопросом 2 – Baig

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