<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/association-mapping.html#many-to-one-unidirectional 以下文單抄字doctrine的官方網站,稍翻譯一下。 ~~~ CREATE TABLE User ( id INT AUTO_INCREMENT NOT NULL, address_id INT DEFAULT NULL, PRIMARY KEY(id) ) ENGINE = InnoDB; CREATE TABLE Address ( id INT AUTO_INCREMENT NOT NULL, PRIMARY KEY(id) ) ENGINE = InnoDB; ALTER TABLE User ADD FOREIGN KEY (address_id) REFERENCES Address(id); ~~~ 1多對一 User 跟address的關系是多對一,即多個user可以屬于同一個地址, entity的映射關系如下: ~~~ <?php /** @Entity */ class User { // ... /** * Many Users have One Address. * @ManyToOne(targetEntity="Address") * @JoinColumn(name="address_id", referencedColumnName="id") */ private $address; } /** @Entity */ class Address { /** * @var integer * * @ORM\Column(name="id", type="integer", precision=0, scale=0, nullable=false, unique=false) * @ORM\Id * @ORM\GeneratedValue(strategy="IDENTITY") */ private $id; } ~~~ @JoinColumn(name="address_id", referencedColumnName="id")這一句就是建立了自身的address_id跟 Address表的名字為id的關系,address的id是指@ORM\Column(name="id", type="integer", precision=0, scale=0, nullable=false, unique=false)。 2 一對一 不可逆 表結構: ~~~ CREATE TABLE Product ( id INT AUTO_INCREMENT NOT NULL, shipping_id INT DEFAULT NULL, UNIQUE INDEX UNIQ_6FBC94267FE4B2B (shipping_id), PRIMARY KEY(id) ) ENGINE = InnoDB; CREATE TABLE Shipping ( id INT AUTO_INCREMENT NOT NULL, PRIMARY KEY(id) ) ENGINE = InnoDB; ALTER TABLE Product ADD FOREIGN KEY (shipping_id) REFERENCES Shipping(id); ~~~ 即一個product有一個shipping 一個產品有一個發貨單 ~~~ <?php <?php /** @Entity */ class Product { // ... /** * One Product has One Shipping. * @OneToOne(targetEntity="Shipping") * @JoinColumn(name="shipping_id", referencedColumnName="id") */ private $shipping; // ... } /** @Entity */ class Shipping { /** * @var integer * * @ORM\Column(name="id", type="integer", precision=0, scale=0, nullable=false, unique=false) * @ORM\Id * @ORM\GeneratedValue(strategy="IDENTITY") */ private $id; } ~~~ 同理這里的shipping_id是表名$shipping對應的是shipping_id,也就是在表名的字段shipping_id, 3 一對一 雙向的 表結構如下: ~~~ CREATE TABLE Cart ( id INT AUTO_INCREMENT NOT NULL, customer_id INT DEFAULT NULL, PRIMARY KEY(id) ) ENGINE = InnoDB; CREATE TABLE Customer ( id INT AUTO_INCREMENT NOT NULL, PRIMARY KEY(id) ) ENGINE = InnoDB; ALTER TABLE Cart ADD FOREIGN KEY (customer_id) REFERENCES Customer(id); ~~~ 也即二個entity都定義了OneToOne ~~~ <?php /** @Entity */ class Customer { // ... /** * One Customer has One Cart. * @OneToOne(targetEntity="Cart", mappedBy="customer") */ private $cart; // ... } /** @Entity */ class Cart { // ... /** * One Cart has One Customer. * @OneToOne(targetEntity="Customer", inversedBy="cart") * @JoinColumn(name="customer_id", referencedColumnName="id") */ private $customer; // ... } ~~~ 4 一對一關系 內部的 指一張表內的關系 結構: ~~~ CREATE TABLE Student ( id INT AUTO_INCREMENT NOT NULL, mentor_id INT DEFAULT NULL, PRIMARY KEY(id) ) ENGINE = InnoDB; ALTER TABLE Student ADD FOREIGN KEY (mentor_id) REFERENCES Student(id); ~~~ mentor為幫助的意思,即一個學生找另一個學生幫助,可能這意思,并且一個學生只能幫助一個人?自己的理解打了一個問口號。 ~~~ <?php /** @Entity */ class Student { // ... /** * One Student has One Student. * @OneToOne(targetEntity="Student") * @JoinColumn(name="mentor_id", referencedColumnName="id") */ private $mentor; // ... } ~~~ 5 一對多的對向關系 One-To-Many, Bidirectional? ~~~ CREATE TABLE Product ( id INT AUTO_INCREMENT NOT NULL, PRIMARY KEY(id) ) ENGINE = InnoDB; CREATE TABLE Feature ( id INT AUTO_INCREMENT NOT NULL, product_id INT DEFAULT NULL, PRIMARY KEY(id) ) ENGINE = InnoDB; ALTER TABLE Feature ADD FOREIGN KEY (product_id) REFERENCES Product(id); ~~~ Feature指特性,可能是指產品有很多特性,色彩重量一類的。 ~~~ <?php use Doctrine\Common\Collections\ArrayCollection; /** @Entity */ class Product { // ... /** * One Product has Many Features. * @OneToMany(targetEntity="Feature", mappedBy="product") */ private $features; // ... public function __construct() { $this->features = new ArrayCollection(); } } /** @Entity */ class Feature { // ... /** * Many Features have One Product. * @ManyToOne(targetEntity="Product", inversedBy="features") * @JoinColumn(name="product_id", referencedColumnName="id") */ private $product; // ... } ~~~ 注意在Product中的構造函數中加入了: public function __construct() { $this->features = new ArrayCollection(); } 可以把特性以arraycollection讀取現來。 6 一對多 非雙向的以join 命令創建的關聯 One-To-Many, Unidirectional with Join Table 表結構: ~~~ CREATE TABLE User ( id INT AUTO_INCREMENT NOT NULL, PRIMARY KEY(id) ) ENGINE = InnoDB; CREATE TABLE users_phonenumbers ( user_id INT NOT NULL, phonenumber_id INT NOT NULL, UNIQUE INDEX users_phonenumbers_phonenumber_id_uniq (phonenumber_id), PRIMARY KEY(user_id, phonenumber_id) ) ENGINE = InnoDB; CREATE TABLE Phonenumber ( id INT AUTO_INCREMENT NOT NULL, PRIMARY KEY(id) ) ENGINE = InnoDB; ALTER TABLE users_phonenumbers ADD FOREIGN KEY (user_id) REFERENCES User(id); ALTER TABLE users_phonenumbers ADD FOREIGN KEY (phonenumber_id) REFERENCES Phonenumber(id); ~~~ 其實這是三張表的關系了,加了中間表:users_phonenumbers ,其中的user_id 跟user中的id關聯,phonenumber_id跟phonenumber表的id關聯。 ~~~ <?php /** @Entity */ class User { /** * Many User have Many Phonenumbers. * @ManyToMany(targetEntity="Phonenumber") * @JoinTable(name="users_phonenumbers", * joinColumns={@JoinColumn(name="user_id", referencedColumnName="id")}, * inverseJoinColumns={@JoinColumn(name="phonenumber_id", referencedColumnName="id", unique=true)} * ) */ private $phonenumbers; public function __construct() { $this->phonenumbers = new \Doctrine\Common\Collections\ArrayCollection(); } // ... } /** @Entity */ class Phonenumber { // ... } ~~~ 7.一對多自關聯 One-To-Many, Self-referencing? 表結構如下: ~~~ CREATE TABLE Category ( id INT AUTO_INCREMENT NOT NULL, parent_id INT DEFAULT NULL, PRIMARY KEY(id) ) ENGINE = InnoDB; ALTER TABLE Category ADD FOREIGN KEY (parent_id) REFERENCES Category(id); ~~~ 對應的entity關系的創建如下: ~~~ <?php /** @Entity */ class Category { // ... /** * One Category has Many Categories. * @OneToMany(targetEntity="Category", mappedBy="parent") */ private $children; /** * Many Categories have One Category. * @ManyToOne(targetEntity="Category", inversedBy="children") * @JoinColumn(name="parent_id", referencedColumnName="id") */ private $parent; // ... public function __construct() { $this->children = new \Doctrine\Common\Collections\ArrayCollection(); } } ~~~ children是我們建的一個屬性,用來保存下面的子菜單 這里又要加入__construct。 8. 多對多關系 不可逆 也即非雙向 Many-To-Many, Unidirectional? 表結構: ~~~ CREATE TABLE User ( id INT AUTO_INCREMENT NOT NULL, PRIMARY KEY(id) ) ENGINE = InnoDB; CREATE TABLE users_groups ( user_id INT NOT NULL, group_id INT NOT NULL, PRIMARY KEY(user_id, group_id) ) ENGINE = InnoDB; CREATE TABLE Group ( id INT AUTO_INCREMENT NOT NULL, PRIMARY KEY(id) ) ENGINE = InnoDB; ALTER TABLE users_groups ADD FOREIGN KEY (user_id) REFERENCES User(id); ALTER TABLE users_groups ADD FOREIGN KEY (group_id) REFERENCES Group(id); ~~~ 這里有一張users_group表為中間表。 entity的關系如下: ~~~ <?php /** @Entity */ class User { // ... /** * Many Users have Many Groups. * @ManyToMany(targetEntity="Group") * @JoinTable(name="users_groups", * joinColumns={@JoinColumn(name="user_id", referencedColumnName="id")}, * inverseJoinColumns={@JoinColumn(name="group_id", referencedColumnName="id")} * ) */ private $groups; // ... public function __construct() { $this->groups = new \Doctrine\Common\Collections\ArrayCollection(); } } /** @Entity */ class Group { // ... } ~~~ 它是通過users_group的關系建立了二者之間的關系 8 多對多 可逆 Many-To-Many, Bidirectional ~~~ <?php /** @Entity */ class User { // ... /** * Many Users have Many Groups. * @ManyToMany(targetEntity="Group", inversedBy="users") * @JoinTable(name="users_groups") */ private $groups; public function __construct() { $this->groups = new \Doctrine\Common\Collections\ArrayCollection(); } // ... } /** @Entity */ class Group { // ... /** * Many Groups have Many Users. * @ManyToMany(targetEntity="User", mappedBy="groups") */ private $users; public function __construct() { $this->users = new \Doctrine\Common\Collections\ArrayCollection(); } // ... } ~~~ 9 Owning and Inverse Side on a ManyToMany association? ~~~ <?php class Article { private $tags; public function addTag(Tag $tag) { $tag->addArticle($this); // synchronously updating inverse side $this->tags[] = $tag; } } class Tag { private $articles; public function addArticle(Article $article) { $this->articles[] = $article; } } <?php $article = new Article(); $article->addTag($tagA); $article->addTag($tagB); ~~~ 10 多對多關系 自關聯 Many-To-Many, Self-referencing 表結構: ~~~ CREATE TABLE User ( id INT AUTO_INCREMENT NOT NULL, PRIMARY KEY(id) ) ENGINE = InnoDB; CREATE TABLE friends ( user_id INT NOT NULL, friend_user_id INT NOT NULL, PRIMARY KEY(user_id, friend_user_id) ) ENGINE = InnoDB; ALTER TABLE friends ADD FOREIGN KEY (user_id) REFERENCES User(id); ALTER TABLE friends ADD FOREIGN KEY (friend_user_id) REFERENCES User(id); ~~~ 以下的entity ~~~ <?php /** @Entity */ class User { // ... /** * Many Users have Many Users. * @ManyToMany(targetEntity="User", mappedBy="myFriends") */ private $friendsWithMe; /** * Many Users have many Users. * @ManyToMany(targetEntity="User", inversedBy="friendsWithMe") * @JoinTable(name="friends", * joinColumns={@JoinColumn(name="user_id", referencedColumnName="id")}, * inverseJoinColumns={@JoinColumn(name="friend_user_id", referencedColumnName="id")} * ) */ private $myFriends; public function __construct() { $this->friendsWithMe = new \Doctrine\Common\Collections\ArrayCollection(); $this->myFriends = new \Doctrine\Common\Collections\ArrayCollection(); } // ... } ~~~ 1.Entity:Category use Doctrine\Common\Collections\ArrayCollection; class Category { // ... /** * @ORM\OneToMany(targetEntity="Product", mappedBy="category") */ protected $products; public function __construct() { $this->products = new ArrayCollection(); } } 2.Entity:Product class Product { // ... /** * @ORM\ManyToOne(targetEntity="Category", inversedBy="products") * @ORM\JoinColumn(name="category_id", referencedColumnName="id") */ protected $category; } 這樣Category和Product就構成了1對多的映射。 php app/console doctrine:schema:update --force 3.、insert數據入庫實例(保存相互關聯的Entities) use AppBundle\Entity\Category; use AppBundle\Entity\Product; use Symfony\Component\HttpFoundation\Response; class DefaultController extends Controller { public function createProductAction() { $category = new Category(); $category->setName('Main Products'); $product = new Product(); $product->setName('Foo'); $product->setPrice(19.99); $product->setDescription('Lorem ipsum dolor'); // relate this product to the category $product->setCategory($category); $em = $this->getDoctrine()->getManager(); $em->persist($category); $em->persist($product); $em->flush(); return new Response( 'Created product id: '.$product->getId() .' and category id: '.$category->getId() ); } } 4.獲取關聯的對象 public function showAction($id) { $product = $this->getDoctrine() ->getRepository('AppBundle:Product') ->find($id); $categoryName = $product->getCategory()->getName(); } 5.另外一種查詢方法 public function showProductsAction($id) { $category = $this->getDoctrine() ->getRepository('AppBundle:Category') ->find($id); $products = $category->getProducts(); } 6.還可以這么做 $product = $this->getDoctrine() ->getRepository('AppBundle:Product') ->find($id); $category = $product->getCategory(); // prints "Proxies\AppBundleEntityCategoryProxy" echo get_class($category); 7.關聯記錄(Repository的查詢) // src/AppBundle/Entity/ProductRepository.php public function findOneByIdJoinedToCategory($id) { $query = $this->getEntityManager() ->createQuery( 'SELECT p, c FROM AppBundle:Product p JOIN p.category c WHERE p.id = :id' )->setParameter('id', $id); try { return $query->getSingleResult(); } catch (\Doctrine\ORM\NoResultException $e) { return null; } } public function showAction($id) { $product = $this->getDoctrine() ->getRepository('AppBundle:Product') ->findOneByIdJoinedToCategory($id); $category = $product->getCategory(); // ... }
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看