Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Laravel]Many-to-Many problem z sync
Forum PHP.pl > Forum > PHP > Frameworki
jacobson
Mam u siebie strukturę tabeli:

products:
id - AI, product_id, lang (product_id i lang tworza unique), nazwa

categories
id - AI, category_id, lang (tak samo jak w products), nazwa

category_product

category_id, product_id

i teraz chce powiązać te tabele poprzez product_id i category_id.
Dzięki temu mogę mieć np produkty
1 | 1 | pl | bluza
2 | 1 | en| hoodie

i kategories

1 | 1 | pl | męskie
2 | 1 | en| man


Mam powiązanie w modelu Product:

  1. public function categories()
  2. {
  3. return $this->belongsToMany('App\Category', 'category_product', 'product_id', 'category_id');
  4. }


oczywiście 1 produkt może posiadać wiele kategorii i te kategorie mogą należeć do wielu produktów.
W momencie zapisu mam :

  1. $product->categories()->sync($request->categories, (sizeof($request->categories) >= sizeof($product->categories)));


Wcześniej kiedy była tylko wersja w jednym języku czyli id z tabeli products i categories były kluczami to wszystko działało prawidłowo, ale teraz już nie działa :/
Ktoś może się już spotkał z czymś takim ? będę wdzięczny za pomoc smile.gif
Pyton_000
A nie działa bo?
jacobson
Nie dziala, bo nie dodaje rekordu do tabeli category_product i nie wypluwa zadnego bledu, przez co ciezko mi znalezc blad :/
Pyton_000
dd($request->categories, (sizeof($request->categories) >= sizeof($product->categories))); questionmark.gif
jacobson
Uff dobra udało mi się naprawić błąd, przez który się nie pokazywało, jednak wciąż mimo określenia relacji many to many na kolumnie product_id, a nie na 'id' to podczas sync dodaje rekord z product_id wzietym z "id".

Produkty:

id | product_id | lang | name

1 | 1 | pl | bluza
2 | 1 | en | hoodie

i teraz

wchodze w link
http://sklep.app/admin/products/2/edit - co powoduje, że jestem na edycji rekordu o "id" = 2

W momencie wybrania kategorii ( [1,2,3] ), kiedy dodaję relację do tabeli category_product powinienem dostać 3 rekordy

category_id | product_id

1 | 1
2 | 1
3 | 1

a zamiast tego dostaję

1 | 2
2 | 2
3 | 2

tak jakby product_id wciąż brało z 'id' a nie z 'product_id'

tak wygląda moja zadeklarowana relacja many to many w modelu Product:

  1. public function categories()
  2. {
  3. return $this->belongsToMany('App\Category', 'category_product', 'product_id', 'category_id');
  4. }

Pyton_000
Bo to co Ty określiłeś to specyfikacja tabeli pivot.
Wrzuca Ci id ponieważ przy relacjach jest używana metoda getKey() która zwraca kolumną PK.

Powiedz czy products_id w products jest jakimś FK do innej tabeli ? Jesli tak to powinieneś wiązać z tamtą tabelą.
jacobson
Tak dokładnie, już znalazłem rozwiązanie tutaj: http://stackoverflow.com/questions/3305239...052814#33052814 i wszystko działa prawidłowo smile.gif
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.