Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [Laravel]Many-to-Many problem z sync
jacobson
post
Post #1





Grupa: Zarejestrowani
Postów: 468
Pomógł: 36
Dołączył: 14.12.2010

Ostrzeżenie: (0%)
-----


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 (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Pyton_000
post
Post #2





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


A nie działa bo?
Go to the top of the page
+Quote Post
jacobson
post
Post #3





Grupa: Zarejestrowani
Postów: 468
Pomógł: 36
Dołączył: 14.12.2010

Ostrzeżenie: (0%)
-----


Nie dziala, bo nie dodaje rekordu do tabeli category_product i nie wypluwa zadnego bledu, przez co ciezko mi znalezc blad :/
Go to the top of the page
+Quote Post
Pyton_000
post
Post #4





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


dd($request->categories, (sizeof($request->categories) >= sizeof($product->categories))); (IMG:style_emoticons/default/questionmark.gif)
Go to the top of the page
+Quote Post
jacobson
post
Post #5





Grupa: Zarejestrowani
Postów: 468
Pomógł: 36
Dołączył: 14.12.2010

Ostrzeżenie: (0%)
-----


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. }

Go to the top of the page
+Quote Post
Pyton_000
post
Post #6





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


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ą.
Go to the top of the page
+Quote Post
jacobson
post
Post #7





Grupa: Zarejestrowani
Postów: 468
Pomógł: 36
Dołączył: 14.12.2010

Ostrzeżenie: (0%)
-----


Tak dokładnie, już znalazłem rozwiązanie tutaj: http://stackoverflow.com/questions/3305239...052814#33052814 i wszystko działa prawidłowo (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 17.09.2025 - 11:58