symfony2 entity oneToMany и методы

Привет, я полностью успешно настроил свою сущность onetoMany и ManyToOne. Я сгенерировал сеттеры и геттеры, а в пользовательской сущности он создал этот метод:

пользовательский объект:

    /**
 * @ORM\OneToMany(targetEntity="TB\RequestsBundle\Entity\Requests", mappedBy="followeeuser")
 */
protected $followees;   

запрашивает сущность:

/**
 * @ORM\ManyToOne(targetEntity="TB\UserBundle\Entity\User", inversedBy="followees")
 * @ORM\JoinColumn(name="followee_id", referencedColumnName="id", nullable=false)
 */ 
protected $followeeuser;

И когда я использую свои собственные запросы, он работает хорошо ... но я не могу понять, как использовать эту сгенерированную функцию из Symfony:

    public function addFollowee(\TB\UserBundle\Entity\User $followee)
{
    $this->followees[] = $followee;
}  

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

$user->addFollowee($userRepository->find($target_user_id));

Found entity of type TB\UserBundle\Entity\User on association TB\UserBundle\Entity\User#followees, but expecting TB\RequestsBundle\Entity\Requests

person Lukas Lukac    schedule 17.03.2013    source источник
comment
Эта функция была создана Symfony2? Он должен называться: public function addFollowee(TB\RequestsBundle\Entity\Requests $followee)   -  person stwe    schedule 17.03.2013
comment
да, даже если бы тогда я на него перешел?   -  person Lukas Lukac    schedule 17.03.2013
comment
Я не знаю, что ты там делаешь. Но если вы попытаетесь настроить для пользователей следующую функцию, посмотрите здесь: docs.doctrine-project.org/projects/doctrine-orm/en/latest/   -  person stwe    schedule 17.03.2013
comment
я видел это один миллиард раз :) я не могу использовать его из-за дополнительных полей в моем объекте ... я пытаюсь установить подписчика через пользователя, например addFollowee ... и не знаю, что мне нужно туда положить ... теперь я сделал это like = ›запросить репозиторий, а затем new Requests () и заполнить все поля ... но я ищу лучший способ   -  person Lukas Lukac    schedule 17.03.2013


Ответы (1)


Возможно, вам стоит подумать о том, что вы пытаетесь сделать, прежде чем писать код. Возьмите ручку и лист бумаги. :)

Скажите, если я ошибаюсь, но я думаю, что вы пытаетесь сделать вот что:

У одного пользователя может быть много «подписчиков». Один «подписчик» может иметь одного пользователя.

Итак, отношения OneToMany в порядке.

Вот как это написать, из документа:

Requests.php (кстати, вы должны использовать Request.php)

/**
 * @ORM\ManyToOne(targetEntity="User", inversedBy="requests")
 **/
private $user;

User.php

/**
 * @ORM\OneToMany(targetEntity="Requests", mappedBy="user", cascade={"all"})
 **/
private $requests;

public function __construct()
{
    $this->requests = new \ArrayCollection();
}

Теперь вы можете проверить, в порядке ли ваше отношение, и обновить схему:

php app/console doctrine:schema:validate
php app/console doctrine:schema:update --force

О геттерах / сеттерах:

Requests.php

public function getUser()
{
    return $this->user;
}

public function setUser(User $user) // Please add a Use statement on top of your document
{
    $this->user = $user;
    return $this;
}

User.php

public function addRequest(Requests $request)
{
    $this->requests->add($request);
    return $this;
}

public function removeRequest(Requests $request)
{
    $this->requests->removeElement($request);
    return $this;
}

// Get requests and set requests (you know how to write those ones)

Теперь, чтобы настроить пользователя на запрос, используйте

$request->setUser($user);

А чтобы добавить запрос пользователю, используйте

$user->addRequest($request);
person Gmajoulet    schedule 17.03.2013
comment
хм ... ваш код почти такой же ... думаю ... а от чего это запросы? $ request- ›setUser ($ user); его $ request = new Request (); ? потому что тогда он выдаст ошибку со всеми пустыми полями, кроме setUser one ofc. - person Lukas Lukac; 17.03.2013
comment
Ты шутишь, что ли ? Из вашего кода: 'TB \ RequestsBundle \ Entity \ Requests' Я не знаю, откуда он, это зависит от вашего приложения! Это объект, который вы хотите добавить своему пользователю! - person Gmajoulet; 17.03.2013
comment
... вы меня не поняли ... я имел в виду, что все ясно ... только до последнего кода ... вы написали $ request- ›setUser ($ user); да, конечно, $ request представляет собой объект запроса ... но как я его «создам, назову»? Должен ли я в моем контроллере писать, как я сказал, $ request = new Request ()? Или как-то иначе. Вы получаете мое приложение в точности. Добавить подписчика в контроллер ... на основе нашей сущности. - person Lukas Lukac; 17.03.2013
comment
Я не знаю, что это за приложение, и не знаю, как вы хотите создавать запросы. Если вы хотите создать запрос через форму, см. Документацию к форме: symfony.com /doc/master/book/forms.html Если вы хотите создать новый запрос, просто используйте new Requests () и заполните его необходимыми данными. - person Gmajoulet; 18.03.2013