0

これら 2 つのエンティティ間に双方向の多対多があります。

位置

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

私の問題は次のとおりです。 ID で位置を簡単に表示する PositionControllers アクションでは、位置を表示したい現在の申請者が現在の位置のブックマークを持っているかどうかを知る必要があります。

私は最初に $applicant->getBookmarks() ですべてのブックマークを取得し、現在の位置に対してすべての応募者のブックマークをチェックしてフォアアーチ内で実行することを考えましたが、もっと簡単な方法があるに違いないと思いますか?

ありがとうございました

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 に答える