Wpis z mikrobloga

Mirki pomóżcie :) Jestem laikiem w #symfony i mam kłopot z relacjami baz danych. Mianowicie mam dwie encje "customersproducts" oraz "products" - chciałbym wyciągnąć sobie dane o produkcie z "customersproducts":

$customer_products = $em->getRepository(Customers_products::class)->find('1');
ale wraz z relacją z encji "products". Aktualnie robię to tak ale mi to nie działa. Jakieś porady? :) Dzięki

class Customers_products
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var Product
*
* @ORM\OneToOne(targetEntity="Products", inversedBy="customer_product")
* @ORM\JoinColumn(name="id_product", referencedColumnName="id")
*/


private $product;
}
class Products
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\OneToOne(targetEntity="Customers_products", cascade={"persist", "remove"}, inversedBy="product")
*/
protected $customer_product;
}
  • 13
@kratekk:
Kilka spraw:
1. Nie Products tylko Product
Jak pobierzesz sobie 10 produktów to będzie miał tablicę która zawiera 10 instancji Products czy to wygląda sensownie? :)
[Products, Products, Products]
2. Jakie inne pola ma Customers_Products? To mi wygląda na teble łączącą. Zależy co chcesz osiągnąć. Powiedz mi czy jeden produkt może być przypisany do kilku customerów?
via Android
  • 0
@bmLq Dzięki za podpowiedź. Jeden customer zawierał będzie wiele produktów Czyli tabela "customers_products" będzie tabelą z id produktu i datą dodania. Chcę ją połączyć z tabelą "producent" OneToOne by automatycznie pobierać za jedną drogą dane o produkcie. Sama tabela "products" też będzie połączona z innymi tabelami np. z tabelą zdjęć lub kategorii. Przy pobieraniu produktów dam oczywiście limit np. do 10.
@kratekk po 1 nie one to one, bo wiele customer product może mieć jeden produkt, po 2 tak jak Ci pisali encja Product bez s bo to jest jeden obiekt po 3 zmienne fajnie jakbyś nazywał customerProducts zamiast customer_products, po 3 @bmLq dał Ci dobre rozwiązanie
@bmLq: Dziękuję kolego, Twoje rozwiązanie jest dobre w relacji klienta i koszyka. Jak Twoim zdaniem powinienem rozwiązać relację koszyka z tabelą produktów? Kolega @lolen podpowiedział że nie powinna być to relacja OneToOne ale przecież jeden produkt w koszyku danego klienta będzie odpowiadał jednemu produktowi w tabeli "products". Źle to sobie wymyśliłem?
@kratekk: Źle.
- Jeden koszyk może posiadać w sobie wiele produktów
- Jeden produkt może być przypisany do wielu koszyków
Wychodzi nam relacja ManyToMany (Dla takiej relacji doctrine w bazie tworzy automatycznie tabele łączącą). Ale Ty na niej w ogóle nie operujesz doctrine robi to automatycznie.
$cart->getProducts() (czyli ma wiele produktów)
$product->getCarts() (produkt znajduje się w wielu koszykach)
Tak to sobie rozkminiaj :)
No chyba, że chcesz mieć info np. kiedy