Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SF2] ManyToMany z dodatkowymi kolumnami
Forum PHP.pl > Forum > PHP
b_chmura
Cześć,

chciałbym stworzyć relację między tabelami tak jak w przypadku ManyToMany z tą różnicą, że tabela pośrednicząca może posiadać dodatkowe kolumny.

Mam tabele:
  1. users
  2. messages
  3. recipients


Przy dodawaniu Message chciałbym mieć multiselecta z danymi z Users. Przy zapisie zaznaczeni Users mięliby się wpisać do tabeli Recipients.
Przy edycji miałby się wyświetlać muliselect z Users z zaznaczonymi Recipients z bazy danych.

Tabela Recipients miałaby być rozszerzona o kolumny Id (autoincrement) i inna/e dodatkowa/e.

Robiliście coś podobnego? Macie jakieś pomysł?

Ps. Posta chciałem dodać w dziale frameworki ale pomimo zaznaczonych tagów wciąć wyskakiwał komunikat o ich wymaganiu.
prz3kus
Napisz z czym masz problem i wklej za mapowane entity tabelek
Crozin
Powinieneś utworzyć podwójną relację jeden-do-wielu i wiele-do-jednego.
b_chmura
Nie potrafię zrobić formularza który przy dodawaniu wyświetli użytkowników z Users. Przy zapisie doda ich do tabeli Recipients. Przy edycji wyświetli listę użytkowników z zaznaczonymi tymi którzy są dodani w Recipients.

Entities:
Users:
  1. <?php
  2.  
  3. namespace Notifications\MailingBundle\Entity;
  4.  
  5. use Doctrine\ORM\Mapping as ORM;
  6.  
  7. /**
  8.  * User
  9.  *
  10.  * @ORM\Table(name="user")
  11.  * @ORM\Entity
  12.  */
  13. class User {
  14.  
  15. /**
  16.   * @var integer
  17.   *
  18.   * @ORM\Column(name="id", type="integer", nullable=false)
  19.   * @ORM\Id
  20.   * @ORM\GeneratedValue(strategy="IDENTITY")
  21.   */
  22. private $id;
  23.  
  24. /**
  25.   * @var string
  26.   *
  27.   * @ORM\Column(name="username", type="string", length=64)
  28.   */
  29. private $username;
  30.  
  31. /**
  32.   * @var string
  33.   *
  34.   * @ORM\Column(name="email", type="string", length=64)
  35.   */
  36. private $email;
  37.  
  38. /**
  39.   *
  40.   * @ORM\OneToMany(targetEntity="MessageRecipient", mappedBy="user")
  41.   */
  42. private $recipients;
  43. ?>


Messages:
  1. <?php
  2.  
  3. namespace Notifications\MailingBundle\Entity;
  4.  
  5. use Doctrine\ORM\Mapping as ORM;
  6.  
  7. /**
  8.  * Message
  9.  *
  10.  * @ORM\Table(name="message")
  11.  * @ORM\Entity
  12.  */
  13. class Message {
  14.  
  15. /**
  16.   * @var integer
  17.   *
  18.   * @ORM\Column(name="id", type="integer", nullable=false)
  19.   * @ORM\Id
  20.   * @ORM\GeneratedValue(strategy="IDENTITY")
  21.   */
  22. private $id;
  23.  
  24. /**
  25.   * @var string
  26.   *
  27.   * @ORM\Column(name="subject", type="string", length=100, nullable=false)
  28.   */
  29. private $subject;
  30.  
  31. /**
  32.   * @var string
  33.   *
  34.   * @ORM\Column(name="message", type="text", nullable=false)
  35.   */
  36. private $message;
  37.  
  38. /**
  39.   *
  40.   * @ORM\OneToMany(targetEntity="MessageRecipient", mappedBy="message")
  41.   */
  42. private $recipients;
  43. ?>


Recipients:
  1. <?php
  2.  
  3. namespace Notifications\MailingBundle\Entity;
  4.  
  5. use Doctrine\ORM\Mapping as ORM;
  6.  
  7. /**
  8.  * MessageRecipient
  9.  *
  10.  * @ORM\Table(name="message_recipient")
  11.  * @ORM\Entity
  12.  */
  13. class MessageRecipient {
  14.  
  15. /**
  16.   * @var integer
  17.   *
  18.   * @ORM\Column(name="id", type="integer")
  19.   * @ORM\Id
  20.   * @ORM\GeneratedValue(strategy="AUTO")
  21.   */
  22. private $id;
  23.  
  24. /**
  25.   * @ORM\ManyToOne(targetEntity="Message", inversedBy="recipients")
  26.   * @ORM\JoinColumn(name="id_message", referencedColumnName="id", nullable=false, onDelete="cascade")
  27.   */
  28. private $message;
  29.  
  30. /**
  31.   * @ORM\ManyToOne(targetEntity="User", inversedBy="recipients")
  32.   * @ORM\JoinColumn(name="id_user", referencedColumnName="id", nullable=false, onDelete="cascade")
  33.   */
  34. private $user;
  35.  
  36. /**
  37.   * @var integer
  38.   *
  39.   * @ORM\Column(name="id_status", type="integer")
  40.   */
  41. private $idStatus;
  42. ?>
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.