Sulu\Bundle\ContactBundle\Entity\ContactRepository::findByIdAndDelete PHP Method

findByIdAndDelete() public method

public findByIdAndDelete ( $id )
    public function findByIdAndDelete($id)
    {
        // Create basic query
        $qb = $this->createQueryBuilder('u')->leftJoin('u.accountContacts', 'accountContacts')->leftJoin('accountContacts.account', 'account')->leftJoin('u.contactAddresses', 'contactAddresses')->leftJoin('contactAddresses.address', 'addresses')->leftJoin('addresses.contactAddresses', 'addressContactAddresses')->leftJoin('addresses.accountAddresses', 'addressAccountAddresses')->leftJoin('addressContactAddresses.contact', 'addressContacts')->leftJoin('addressAccountAddresses.account', 'addressAccounts')->leftJoin('addresses.country', 'country')->leftJoin('addresses.addressType', 'addressType')->leftJoin('u.locales', 'locales')->leftJoin('u.emails', 'emails')->leftJoin('emails.contacts', 'emailsContacts')->leftJoin('emails.accounts', 'emailsAccounts')->leftJoin('emails.emailType', 'emailType')->leftJoin('u.notes', 'notes')->leftJoin('u.phones', 'phones')->leftJoin('phones.contacts', 'phonesContacts')->leftJoin('phones.accounts', 'phonesAccounts')->leftJoin('phones.phoneType', 'phoneType')->leftJoin('u.faxes', 'faxes')->leftJoin('faxes.contacts', 'faxesContacts')->leftJoin('faxes.accounts', 'faxesAccounts')->leftJoin('faxes.faxType', 'faxType')->leftJoin('u.tags', 'tags')->leftJoin('u.urls', 'urls')->leftJoin('u.title', 'title')->leftJoin('accountContacts.position', 'position')->addSelect('position')->addSelect('title')->addSelect('urls')->addSelect('tags')->addSelect('accountContacts')->addSelect('account')->addSelect('locales')->addSelect('emails')->addSelect('emailType')->addSelect('faxes')->addSelect('faxType')->addSelect('phones')->addSelect('phoneType')->addSelect('contactAddresses')->addSelect('addressContactAddresses')->addSelect('addressAccountAddresses')->addSelect('addresses')->addSelect('country')->addSelect('addressType')->addSelect('emailsContacts')->addSelect('faxesContacts')->addSelect('phonesContacts')->addSelect('addressContacts')->addSelect('emailsAccounts')->addSelect('faxesAccounts')->addSelect('phonesAccounts')->addSelect('addressAccounts')->addSelect('notes')->where('u.id=:id');
        $query = $qb->getQuery();
        $query->setParameter('id', $id);
        try {
            $contact = $query->getSingleResult();
            return $contact;
        } catch (NoResultException $nre) {
            return;
        }
    }

Usage Example

Exemplo n.º 1
0
 /**
  * Deletes the contact for the given id.
  *
  * @return \Closure
  */
 public function delete()
 {
     /*
      * TODO: https://github.com/sulu-io/sulu/pull/1171
      * This method needs to be refactored since in the first
      * iteration the logic was just moved from the Controller
      * to this class due to better reusability.
      */
     $delete = function ($id) {
         /** @var Contact $contact */
         $contact = $this->contactRepository->findByIdAndDelete($id);
         if (!$contact) {
             throw new EntityNotFoundException($this->contactRepository->getClassName(), $id);
         }
         $addresses = $contact->getAddresses();
         /** @var Address $address */
         foreach ($addresses as $address) {
             if (!$address->hasRelations()) {
                 $this->em->remove($address);
             }
         }
         $phones = $contact->getPhones()->toArray();
         /** @var Phone $phone */
         foreach ($phones as $phone) {
             if ($phone->getAccounts()->count() == 0 && $phone->getContacts()->count() == 1) {
                 $this->em->remove($phone);
             }
         }
         $emails = $contact->getEmails()->toArray();
         /** @var Email $email */
         foreach ($emails as $email) {
             if ($email->getAccounts()->count() == 0 && $email->getContacts()->count() == 1) {
                 $this->em->remove($email);
             }
         }
         $urls = $contact->getUrls()->toArray();
         /** @var Url $url */
         foreach ($urls as $url) {
             if ($url->getAccounts()->count() == 0 && $url->getContacts()->count() == 1) {
                 $this->em->remove($url);
             }
         }
         $faxes = $contact->getFaxes()->toArray();
         /** @var Fax $fax */
         foreach ($faxes as $fax) {
             if ($fax->getAccounts()->count() == 0 && $fax->getContacts()->count() == 1) {
                 $this->em->remove($fax);
             }
         }
         $this->em->remove($contact);
         $this->em->flush();
     };
     return $delete;
 }