में एक ई-नोटिस का कारण बन जाएगा सिम्फनी 2 प्रोजेक्ट के लिए मुझे ब्लॉग पोस्ट और तथाकथित प्लेटफ़ॉर्म के बीच संबंध बनाना था। एक प्लेटफ़ॉर्म साइट पर देखने के लिए उपयोग किए जाने वाले डोमेन के आधार पर एक विशिष्ट फ़िल्टर को परिभाषित करता है। उदाहरण के लिए: यदि आप url first-example.com द्वारा साइट में शामिल होते हैं, तो साइट केवल ब्लॉग पोस्ट प्रदान करेगी, जो इस विशिष्ट प्लेटफॉर्म से जुड़े हुए हैं।एंटीटी रिपोजिटरी :: findBy() का उपयोग कई से कई रिश्ते के साथ डॉक्टर
ऐसा करने के लिए, मैंने दो इकाइयां पोस्ट और प्लेटफार्म बनाई। बाद में मैंने उन्हें कई से कई रिश्ते के साथ मैप किया। मैं बिल्टिन फ़ंक्शन findBy()
से डॉक्टरों के EntityRepository
में इस से कई से कई रिश्तों के माध्यम से डेटा पुनर्प्राप्त करने का प्रयास कर रहा हूं।
// every one of these methods will throw the same error
$posts = $postRepo->findBy(array('platforms' => array($platform)));
$posts = $postRepo->findByPlatforms($platform);
$posts = $postRepo->findByPlatforms(array($platform));
कहाँ $postRepo
Post
इकाई और $platform
एक मौजूदा Platform
वस्तु के लिए सही भंडार है।
किसी भी तरह से: मैं अंत में निम्न त्रुटि हो रही है:
ErrorException: Notice: Undefined index: joinColumns in [...]/vendor/doctrine/orm/lib/Doctrine/ORM/Persisters/BasicEntityPersister.php line 1495
[...]/vendor/doctrine/orm/lib/Doctrine/ORM/Persisters/BasicEntityPersister.php:1495
[...]/vendor/doctrine/orm/lib/Doctrine/ORM/Persisters/BasicEntityPersister.php:1452
[...]/vendor/doctrine/orm/lib/Doctrine/ORM/Persisters/BasicEntityPersister.php:1525
[...]/vendor/doctrine/orm/lib/Doctrine/ORM/Persisters/BasicEntityPersister.php:1018
[...]/vendor/doctrine/orm/lib/Doctrine/ORM/Persisters/BasicEntityPersister.php:842
[...]/vendor/doctrine/orm/lib/Doctrine/ORM/EntityRepository.php:157
[...]/src/Foobar/BlogBundle/Tests/ORM/PostTest.php:102
यह भी एक बहुत-से-अनेक संबंध इस तरह से संबंधित entites पुनः प्राप्त करना संभव है, या हूँ मैं अपने आप से इन कार्यों लिखने के लिए मजबूर कर दिया? अजीब चीज यह है: सिद्धांत किसी भी त्रुटि को फेंक नहीं देगा: "यह संभव नहीं है।", लेकिन एक आंतरिक E_NOTICE
। Thats क्यों मुझे लगता है कि यह संभव होना चाहिए, लेकिन मुझे कुछ बिंदु याद आ रही है।
दिलचस्प भागों में फिसल गया, दोनों इकाइयां इस तरह दिखती हैं।
<?php
namespace Foobar\CommunityBundle\Entity;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;
// [...] other namespace stuff
/**
* @ORM\Entity(repositoryClass="Foobar\CommunityBundle\Entity\Repository\PlatformRepository")
* @ORM\Table(name="platforms")
*/
class Platform
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
// [...] other field stuff
}
<?php
namespace Foobar\BlogBundle\Entity;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;
// [...] other namespace stuff
/**
* @ORM\Entity(repositoryClass="Foobar\BlogBundle\Entity\Repository\PostRepository")
* @ORM\Table(name="posts")
*/
class Post implements Likeable, Commentable, Taggable, PlatformAware
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\ManyToMany(targetEntity="Foobar\CommunityBundle\Entity\Platform", cascade={"persist"})
* @ORM\JoinTable(name="map_post_platform",
* joinColumns={@ORM\JoinColumn(name="post_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="platform_id", referencedColumnName="id")}
* )
*/
protected $platforms;
// [...] other fields
/**
* Constructor
*/
public function __construct()
{
// [...]
$this->platforms = new ArrayCollection();
}
}
और हां composer.json फ़ाइल (और साथ ही प्रासंगिक लाइनों के लिए नीचे छीन) की
{
[...]
"require": {
"php": ">=5.3.3",
"symfony/symfony": "2.1.*",
"doctrine/orm": ">=2.2.3,<2.4-dev",
"doctrine/doctrine-bundle": "1.0.*",
"doctrine/doctrine-fixtures-bundle": "dev-master",
[...]
},
[...]
}
अपने जवाब के लिए धन्यवाद। बस थोड़ा सा जोड़ा। आपकी पहली विधि कस्टम रिपोजिटरी में अपना फ़ंक्शन लिख रही है। मैंने खुद को अस्पष्ट व्यक्त किया हो सकता है लेकिन मैंने संबंधित संस्थाओं को अंतर्निहित 'find *() 'सिद्धांत के कार्य के माध्यम से लाने की कोशिश की। दूसरी विधि काम नहीं करती है क्योंकि मेरे पास एक यूनी-दिशात्मक संघ है। इसलिए 'प्लेटफार्म' पर कोई संपत्ति '$ पोस्ट' नहीं है और इसके कारण, कोई गेटर और सेटर्स नहीं हैं। फिर भी आपका जवाब मुझे बहुत मदद करता है, क्योंकि अब मैं और अधिक निश्चित हूं कि फ़िल्टर करने के लिए अंतर्निहित तरीकों का उपयोग करना संभव नहीं है। – devsheeep