создание нескольких отношений onetoMany в Sumfony 2.5

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

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

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

  • сообщение (где сообщения блога идут) его 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, Во время чтения «Извлечение связанных объектов », кажется, что я должен быть в состоянии получить название категории, делая следующее

$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 юридическое лицо

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

0

Решение

Вопрос 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();
}

// ...
}

Убедитесь, что у вас есть правильный аналог в других объектах:

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 имя класса Должно быть более интуитивным, как это.

вопрос 2

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

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]