खोज…


एक नया रिपोजिटरी बनाना

आप जहां चाहें, एक नया रिपॉजिटरी बना सकते हैं, लेकिन उन्हें अलग से Repository फ़ोल्डर में बनाने की सिफारिश की जाती है।

जब आप अपनी इच्छानुसार रिपॉजिटरी फ़ाइल और वर्ग का नाम दे सकते हैं, तो रिपॉजिटरी EntityNameRepository का नाम देने की अनुशंसा की जाती है, ताकि आप उन लोगों को अपने फ़ोल्डर में तेज़ी से खोज सकें।

मान लें कि हमारे पास एक Project इकाई है, जो AppBundle\Entity में संग्रहीत है, यह इस तरह दिखेगा:

<?php
    
namespace AppBundle\Entity;
    
use Doctrine\ORM\Mapping as ORM;

/**
 * Project Entity - some information 
 *
 * @ORM\Table(name="project")
 * @ORM\Entity(repositoryClass="AppBundle\Repository\ProjectRepository")
 */
class Project
{
   // definition of the entity with attributes, getters, setter whatsoever
}
    
?>

यहाँ महत्वपूर्ण भाग @ORM\Entity(repositoryClass="AppBundle\Repository\ProjectRepository") , क्योंकि यह दिए गए रिपॉज़िटरी वर्ग के साथ इस Entity को जोड़ता है।

इसके अलावा, आपको मैपिंग विकल्पों का उपयोग करने के लिए \Doctrine\ORM\Mapping वर्ग का उपयोग करने की आवश्यकता है।

रिपॉजिटरी अपने आप में बहुत सरल है

<?php

namespace AppBundle\Repository;

class ProjectRepository extends \Doctrine\ORM\EntityRepository
{
    public function getLastTenProjects()
    {
        // creates a QueryBuilder instance
        $qb = $this->_em->createQueryBuilder()
            ->select('p')
            ->from($this->_entityName, 'p')
            ->orderBy('p.id', 'DESC')
            ->setMaxResults(10)
        ;
        // uses the build query and gets the data from the Database
        return $qb->getQuery()->getResult();
    }
}

?>

यह नोट करना महत्वपूर्ण है कि रिपॉजिटरी वर्ग को \Doctrine\ORM\EntityRepository विस्तार करना चाहिए, ताकि यह ठीक से काम कर सके। अब आप अलग-अलग क्वेरी के लिए जितने चाहें उतने फ़ंक्शन जोड़ सकते हैं।

ExpressionBuilder IN () फ़ंक्शन

यदि आप QueryBuilder में MySQL कमांड IN() का उपयोग करना चाहते हैं, तो आप ExpressionBuilder वर्ग के in() फ़ंक्शन के साथ कर सकते हैं।

// get an ExpressionBuilder instance, so that you
$expressionBulder = $this->_em->getExpressionBuilder();
$qb = $this->_em->createQueryBuilder()
->select('p')
->from($this->_entityName, 'p');
->where($expressionBuilder->in('p.id', array(1,2,3,4,5)));

return $qb->getQuery()->getResult();

सब-क्वेरी के साथ एक क्वेरी करें

उदाहरण के लिए, केवल HOW-TO का उपयोग करने के लिए एक चयन कथन के अंदर एक सबक्वेरी सेलेक्ट स्टेटमेंट का उपयोग करें, मान लें कि हमें उन सभी उपयोगकर्ता को ढूंढना है जिनका अभी तक पता नहीं है (एड्रेस टेबल में कोई रिकॉर्ड मौजूद नहीं है):

 // get an ExpressionBuilder instance, so that you
$expr = $this->_em->getExpressionBuilder();

// create a subquery in order to take all address records for a specified user id
$sub = $this->_em->createQueryBuilder()
    ->select('a')
    ->from($this->_addressEntityName, 'a')
    ->where('a.user = u.id');


$qb = $this->_em->createQueryBuilder()
    ->select('u')
    ->from($this->_userEntityName, 'u')
    ->where($expr->not($expr->exists($sub->getDQL())));

return $qb->getQuery()->getResult();


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow