निश्चित बात। समझने वाली पहली बात यह है कि ऐसा करने के लिए कोई "एक रास्ता" नहीं है। यह सिद्धांत define the relationship के संदर्भ में बहुत लचीलापन देता है - भले ही एकाधिक परिभाषाएं समान डीडीएल उत्पन्न करती हैं (और यह समझना महत्वपूर्ण है - कुछ मैपिंग विकल्प केवल ओआरएम के ऑब्जेक्ट-साइड को प्रभावित करते हैं, मॉडल-पक्ष नहीं)
यहाँ अपने उपयोगकर्ता/समूहों/अनुमतियां उदाहरण है, जो वास्तव में सभी कई-से-अनेक संघों (मैं सभी गैर-प्रासंगिक बाहर रखा गया है, लेकिन कोड की आवश्यकता, पी स्तंभ परिभाषा की तरह)
<?php
namespace Your\Bundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
/**
* @ORM\Entity
*/
class User
{
/**
* Many-To-Many, Unidirectional
*
* @var ArrayCollection $groups
*
* @ORM\ManyToMany(targetEntity="Group")
* @ORM\JoinTable(name="user_has_group",
* joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="group_id", referencedColumnName="id")}
*)
*/
protected $groups;
/**
* Many-To-Many, Unidirectional
*
* @var ArrayCollection $permissions
*
* @ORM\ManyToMany(targetEntity="Permission")
* @ORM\JoinTable(name="user_has_permission",
* joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="permission_id", referencedColumnName="id")}
*)
*/
protected $permissions;
public function __construct()
{
$this->groups = new ArrayCollection();
$this->permissions = new ArrayCollection();
}
}
/**
* @ORM\Entity
*/
class Group
{
/**
* Many-To-Many, Unidirectional
*
* @var ArrayCollection $permissions
*
* @ORM\ManyToMany(targetEntity="Permission")
* @ORM\JoinTable(name="group_has_permission",
* joinColumns={@ORM\JoinColumn(name="group_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="permission_id", referencedColumnName="id")}
*)
*/
protected $permissions;
public function __construct()
{
$this->permissions = new ArrayCollection();
}
}
/**
* @ORM\Entity
*/
class Permission {}
यदि आपके पास हैं यहां क्या हो रहा है के बारे में प्रश्न, मुझे बताएं।
अब, अपने दूसरे उदाहरण के लिए
<?php
namespace Your\Bundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
/**
* @ORM\Entity
*/
class Ticket
{
/**
* Many-To-One, Unidirectional
*
* @var Category
*
* @ORM\ManyToOne(targetEntity="Category")
* @ORM\JoinColumn(name="category_id", referencedColumnName="id")
*/
protected $category;
/**
* Many-To-Many, Unidirectional
*
* @var ArrayCollection $permissions
*
* @ORM\ManyToMany(targetEntity="Tag")
* @ORM\JoinTable(name="tickt_has_tag",
* joinColumns={@ORM\JoinColumn(name="ticket_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="tag_id", referencedColumnName="id")}
*)
*/
protected $tags;
/**
* One-To-Many, Bidirectional
*
* @var ArrayCollection $comments
*
* @ORM\OneToMany(targetEntity="Comment", mappedBy="ticket")
*/
protected $comments;
public function __construct()
{
$this->tags = new ArrayCollection();
$this->comments = new ArrayCollection();
}
}
/**
* @ORM\Entity
*/
class Comment
{
/**
* Many-To-One, Bidirectional
*
* @var Ticket $ticket
*
* @ORM\ManyToOne(targetEntity="Ticket")
* @ORM\JoinColumn(name="ticket_id", referencedColumnName="id")
*/
protected $ticket=null;
}
/**
* @ORM\Entity
*/
class Tag {}
/**
* @ORM\Entity
*/
class Category {}
पहले की तरह, मुझे पता है अगर आप इस में से किसी के बारे में बताया चाहते हैं।
पीएस इनमें से कोई भी वास्तव में परीक्षण नहीं किया गया था, मैं बस अपने आईडीई में तेजी से इसे टक्कर लगी। एक टाइपो या दो हो सकता है;)
क्यों inverseJoin कॉलम? – vinnylinux
इसके अलावा, अलग-अलग टेबल नाम क्यों?और अनुमति_आईडी घोषित नहीं किया जाना चाहिए? – vinnylinux
@ विन्निलिनक्स - मुझे पूरी तरह से आपके प्रश्न नहीं मिलते हैं। inverseJoinColumns बस आप एक अनौपचारिक कई से अधिक रिश्तों की घोषणा कैसे करते हैं - जवाब देने के लिए "क्यों" नहीं है - यह ठीक है कि यह कैसे किया जाता है। और मुझे नहीं लगता कि आपका दूसरा प्रश्न बिल्कुल क्या है। –