0

我在这两个实体之间有一个双向的多对多:

位置

/**
* Position
*
* @ORM\Table(name="applypie_position")
* @ORM\Entity(repositoryClass="Applypie\Bundle\PositionBundle\Entity\PositionRepository")
*/
class Position
{

const IS_ACTIVE = true;

/**
 * @var integer
 *
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;

/**
 * @ORM\ManyToMany(targetEntity="Applypie\Bundle\UserBundle\Entity\Applicant", mappedBy="bookmarks")
 */
private $bookmarkedApplicants;

申请人

/**
 * Applicant
 *
 * @ORM\Table(name="applypie_applicant")
 * @ORM\Entity
 */
class Applicant
{
/**
 * @var integer
 *
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;

/**
 * @ORM\ManyToMany(targetEntity="Applypie\Bundle\PositionBundle\Entity\Position", inversedBy="bookmarkedApplicants")
 * @ORM\JoinTable(name="applypie_user_job_bookmarks",
 *      joinColumns={@ORM\JoinColumn(name="applicant_id", referencedColumnName="id")},
 *      inverseJoinColumns={@ORM\JoinColumn(name="position_id", referencedColumnName="id")}
 *      )
 */
private $bookmarks;

我的问题是:在一个 PositionControllers 动作中,它很容易通过 ID 显示一个位置,我需要知道当前的申请人是否希望看到该位置有一个当前位置的书签。

我首先想到的是使用 $applicant->getBookmarks() 获取所有书签并在 forarch 中运行,根据当前位置检查所有申请人的书签,但我认为必须有更简单的方法?

谢谢你

4

1 回答 1

1

如果你想保持面向对象,你可以这样做:

class Applicant
{
    // fields and ORM annotations

    public function hasBookmark(Bookmark $bookmark) {
        return $this->bookmarks->contains($bookmark);
    }



class MyController
{
    public function testAction() {
        $applicant = $this->getUser(); // or however you fetch the applicant object
        $bookmark  = $bookmarkRepository->find($bookmarkId); // again, however you get the bookmark object

        // @var boolean $applicantHasBookmark
        $applicantHasBookmark = $applicant->hasBookmark($bookmark);

        // other controller code
    }
于 2013-10-02T15:57:47.080 回答