2012-06-10 4 views
0

У меня есть небольшое приложение symfony2, где пользователь может создавать страницы. Каждая страница должна быть доступна по маршруту/{user_slug}/{page_slug}. У меня есть пользователь и страница сущностей, и я использую sluggable поведение для обоих объектов. Чтобы найти нужную страницу, комбинация user_slug и page_slug должна быть уникальной.уникальные слизни с несколькими объектами в symfony2

Каков наилучший способ проверить, что комбинация user_slug и page_slug является uniqe?

+0

Я не понимаю, чего вы хотите. Когда вы хотите проверить уникальность user_slug и page_slug? –

+0

Я хочу проверить пули, если пользователь создает страницу – huzi

ответ

1

Попробуйте это в prepository:

public function findByUsernameAndSlug($username, $slug) 
{ 
    $em = $this->getEntityManager(); 
    $query = $em->createQuery(" 
     SELECT g 
     FROM Acme\PagesBundle\Entity\Page p 
     JOIN p.owner u 
     WHERE u.username = :username 
     AND p.slug = :slug 
    ") 
      ->setParameter('username', $username) 
      ->setParameter('slug', $slug); 

    foreach ($query->getResult() as $goal) { 
     return $goal; 
    } 

    return null; 
} 
0

Перед тем, как сохраняются лица в чеке службы двухслойного ли данное сочетание пользователя и страницы слизня являются уникальными, если не изменить страницу слизняка (добавить -2 или что-то как это) или выбросить исключение:

public function persistPage(Page $page) { 
    $userSlug = $page->getUser()->getSlug(); 
    $pageSlug = $page->getSlug(); 

    if ($this->pagesRepository->findOneBySlugs($userSlug, $pageSlug) != null) { 
     // given combination already exists 
     throw new NonUniqueNameException(..); 
     // or modify the slug 
     $page->setSlug($page->getSlug() . '-2'); 
     return $this->persistPage($page); 
    } 

    return $this->em->persist($page); 
} 

// PagesRepository::findOneBySlugs($userSlug, $pageSlug) 
public function findOneBySlugs($userSlug, $pageSlug) { 
    $query = $this->em->createQueryBuilder('p') 
      ->addSelect('u') 
      ->join('p.user', 'u') 
      ->where('p.slug = :pageSlug') 
      ->where('u.slug = :userSlug;) 
      ->getQuery(); 

    $query->setParameters(combine('userSlug', 'pageSlug')); 

    return $query->getSingleResult(); 
}