Symfony3 - вместо целого числа возвращается строка

1

В моем объекте User у меня есть следующее:

/**
* @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;

Это моя полная запись.

<?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 мог обрабатывать как строки, так и целые числа.

  • 0
    Ваш метод getAuthorId возвращает объект сущности User, а не id. Вероятно, следует просто return $this->author->getId();
  • 0
    Хорошо, это было просто @JimL, ха-ха. Слишком много Symfony за день. Спасибо!
Теги:
doctrine2

1 ответ

0
Лучший ответ

В частности, это изменение:

/**
 * Get author ID
 *
 * @return intger
 */
public function getAuthorId()
{
    return $this->author->getId();
}

Примечание: документацию @return следует изменить, чтобы показать, что она возвращает целое число.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню