В моем пользовательском объекте у меня есть это:
/**
* @ORM\Entity
* @ORM\Table(name="users")
*/
class User extends BaseUser
{
/**
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @var \Doctrine\Common\Collections\ArrayCollection
* @ORM\OneToMany(targetEntity="Blog\BlogBundle\Entity \Entry",mappedBy="author")
*/
protected $entries;
Это моя полная сущность Entry.
<?php
namespace Blog\BlogBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* Entry
*
* @ORM\Table(name="entry")
* @ORM\Entity(repositoryClass="Blog\BlogBundle\Repository\EntryRepository")
*/
class Entry
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="title", type="string", length=255)
*/
private $title;
/**
* @var string
*
* @ORM\Column(name="book", type="text")
*/
private $book;
/**
* @var \DateTime
*
* @ORM\Column(name="timestamp", type="datetime")
*/
private $timestamp;
/**
* @var AppBundle\Entity
* @ORM\ManyToOne(targetEntity="AppBundle\Entity\User",inversedBy="entries")
* @ORM\JoinColumn(name="author", referencedColumnName="id")
*/
private $author;
/**
* @var \Doctrine\Common\Collections\ArrayCollection
* @ORM\OneToMany(targetEntity="Blog\BlogBundle\Entity\Reviews",mappedBy="book_id")
*/
protected $reviews;
/**
* Get id
*
* @return int
*/
public function getId()
{
return $this->id;
}
/**
* Set title
*
* @param string $title
*
* @return Entry
*/
public function setTitle($title)
{
$this->title = $title;
return $this;
}
/**
* Get title
*
* @return string
*/
public function getTitle()
{
return $this->title;
}
/**
* Set book
*
* @param string $book
*
* @return Entry
*/
public function setBook($book)
{
$this->book = $book;
return $this;
}
/**
* Get book
*
* @return string
*/
public function getBook()
{
return $this->book;
}
/**
* Set timestamp
*
* @param \DateTime $timestamp
*
* @return Entry
*/
public function setTimestamp($timestamp)
{
$this->timestamp = $timestamp;
return $this;
}
/**
* Get timestamp
*
* @return \DateTime
*/
public function getTimestamp()
{
return $this->timestamp;
}
/**
* Set author
*
* @param \AppBundle\Entity\User $author
*
* @return Entry
*/
public function setAuthor(\AppBundle\Entity\User $author = null)
{
$this->author = $author;
return $this;
}
/**
* Get author
*
* @return \AppBundle\Entity\User
*/
public function getAuthor()
{
return $this->author;
}
/**
* Get author ID
*
* @return \AppBundle\Entity\User
*/
public function getAuthorId()
{
$id = $this->author;
return $this->$id;
}
public function __toString()
{
try {
return (string) $this->id;
} catch (Exception $exception) {
return '';
}
}
}
Из этого фрагмента кода я пытаюсь получить идентификатор автора, но вместо этого возвращается имя автора. Я предполагаю, что это потому, что я конвертирую в строку в конце. Если я удаляю его, я получаю эту ошибку: symfony2 Catchable Fatal Error: объект класса не может быть преобразован в строку
Чтобы получить ссылку, я делаю следующее:
author
с параметром id
в routing.yml пакета, который запускает authorAction($id)
внутри BookController. Ожидается, что будет передано целое число.authorAction($id)
настраивает Doctrine Manager, вызывает getAllBooksByAuthor()
функция в хранилище, где соответствующий запрос возвращает все книги автора с id
и отображает шаблон веточки.Как я могу сделать так, чтобы вместо имени автора передавался идентификатор автора?
Я застрял здесь и мне нужно Entry
сущность, чтобы иметь возможность обрабатывать как строки, так и целые числа.
В частности, это изменение:
/**
* Get author ID
*
* @return intger
*/
public function getAuthorId()
{
return $this->author->getId();
}
Примечание: документация @return должна быть изменена, чтобы показать, что она возвращает целое число.
Других решений пока нет …