Konrad Kluźniak

Konrad Kluźniak Webdeveloper /
Designer

Temat: Model hasMany

Witam,
Mam do Was prośbę o wyjaśnienie pewnej kwestii.

Wertuję dokumentację w temacie relacji .

Jak połączyć modele, w relacji np: hasMany?
Chodzi tylko o to, że nie mam w bazie foreign key, a mam 2 modele:

News, Photo .

News { public $hasMany = 'Photo' } , ale w Photo jest tylko id i path, bez foreign key.

Inaczej pisząc, jak to zrobić, żeby do News'ów dodać kilka zdjęć z Photo bez użycia foreign key?

Pytam dlatego, że Photo to model do ładowania zdjęć na serwer, on nie wie, które zdjęcie będzie do News czy Galerii.

Normalnie taki temat rozwiązuje jakieś proste Query do Mysql, ale jak Cake;owo to rozwiązać w modelach?

Dziękuję za pomoc.
Sławomir Jach

Sławomir Jach Programista,
DreamLab

Temat: Model hasMany

Jakim cudem chcesz połączyć zdjecia z newsami bez łączenia ich jakimś kliczem :)? Dodaj do photo news_id i już. Chyba ze zrobisz tabele łączeniową photos_news ale to przerost formy nad treścią.

konto usunięte

Temat: Model hasMany

Sławomir J.:
Jakim cudem chcesz połączyć zdjecia z newsami bez łączenia ich jakimś kliczem :)? Dodaj do photo news_id i już. Chyba ze zrobisz tabele łączeniową photos_news ale to przerost formy nad treścią.

Poza sytuacją, gdy jedna fotka jest do wielu newsów, a to już nie jest jakaś stricte abstrakcja w przypadku gdy nie mamy źródłowych zdjęć, wrzuca się jakieś ogólne (np. wypadek -> karetka pogotowia etc.)
Konrad Kluźniak

Konrad Kluźniak Webdeveloper /
Designer

Temat: Model hasMany

Rozumie, że w takim przypadku, Model::query() będzie OK.

Chociaż, wrzucenie klucza obcego to tez nie problem, tyle tylko, że jak to będzie np: news_id , ja zrobię sobie Slider, w którym można wybrać zdjęcia do niego, w tabeli photo przydałby się slider_id :) ...Ten post został edytowany przez Autora dnia 09.07.13 o godzinie 10:30
Kamil Kosiński

Kamil Kosiński CTO w
DobryMechanik.pl

Temat: Model hasMany

Nie. Model->query nie będzie ok. Znowu robisz coś na około (w rozumieniu cake).

Widzę dwie opcje:

1. dodajesz kolejne klucze w tabeli photos i robisz:
a) jeden model Photo wykorzystywany we wszystkich relacjach
b) oddzielne modele NewsPhoto, SliderPhoto (z useTable='photos'), ... jeśli potrzebna Ci np. inna walidacja w różnych przypadkach

2. robisz relację habtm News<->Photo, Slider<->Photo itd

Wszystko zależy od tego czy jedna fotka może należeć do wielu newsów/sliderów/...
Bartek Naski

Bartek Naski CakePHP developer

Temat: Model hasMany

najfajniejsze są HBTM :) nie ważne co robię zawsze staram się używać HBTM jako podstawy do zabawy, hasone hasmany czy belongsto idą w drugiej kolejności, hasAndBelongsToMany jest łatwe i skalowalne i zawsze można to przerobić, a i możliwości są większe itd itp...
Konrad Kluźniak

Konrad Kluźniak Webdeveloper /
Designer

Temat: Model hasMany

Dziękuję,
HMABTM test rewelacyjny, muszę go jednak lepiej poznać.

Na tą chwilę - wiele zdjęć jest w wielu newsach, a wiele newsów może mieść wiele zdjęć, więc po co brałem hasMany ?:)

a teraz:

a) class News extends AppModel {
public $hasAndBelongsToMany = array(
'Photo'
);
}

b) zrobiłem tabelę łączeniową ( id, news_id, photos_id ).
Zapoznaję się z tym, ale to faktycznie działa.
Jednak poznanie tej relacji zajmie chwilę, co nie zmienia faktu, że:

Dziękuję Wam.
Pozdrawiam.
Bartek Naski

Bartek Naski CakePHP developer

Temat: Model hasMany

ja wrzucam często fotki artykułów do bazy, w hasAndBelongsToMany od razu wykluczam pobieranie binarek, binarki choć nie muszę obstawiam base64, większość twierdzi ze foty w bazie to głupota ja że zajeb.. sprawa :P jest klarownie a co do pojemności to gd2 świetnie sobie radzi z jakością do wielkości, na moim przykładzie baza >10000 zdjęć w 3 wersjach zajmuje niecałe 150MB thumb+medium+lagre, spróbuj, jako narzędzie uploadu świetnie nadaje się uploadify ale tylko jeżeli używasz serwera bez https lub https z certyfikatem, w przeciwnym wypadku trudniejszym w implementacji będzie upload w jQuery



Wyślij zaproszenie do