Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [CakePHP] Zapisywanie danych do bazy
ZenekN
post 11.01.2014, 21:14:21
Post #1





Grupa: Zarejestrowani
Postów: 395
Pomógł: 5
Dołączył: 7.08.2012

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


Hej mam taki problem, mianowicie w formularzu korzystam z rozwijanej listy czyli input('type' => 'select')



Tekst pogrubioną czcionką to dane z modelu Category (w formularzu służy jako optgroup fieldname)
Tekst zwykłą czcionką to dane z modelu Subcategory (w formularzu służy jako option value)

zapisując dane typu
  1. $this->data['Nazwa']['subcategory_id']


otrzymuje wartość liczbową subcategory np.

  1. 33


a otrzymana tablica po debug($this->data);

to

  1. 'Product' => array(
  2. 'subcategory_id' => '33',
  3. 'category_id' => '',
  4.  
  5. )
  6. )



jak zrobić aby zapisać że jeśli subcategory_id to 33 to category_id to 2

wiem że istnieje funkcja beforeSave ale nie wiem jak użyć to praktycznie :/

Ten post edytował ZenekN 11.01.2014, 21:15:31
Go to the top of the page
+Quote Post
kicaj
post 12.01.2014, 15:53:00
Post #2





Grupa: Zarejestrowani
Postów: 1 640
Pomógł: 28
Dołączył: 13.02.2003
Skąd: Międzyrzecz/Poznań

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


Niestety, musisz wykonać zapytanie do jakiej kategorii należy wybrana subkategoria.

Przykładowo:
  1. public function beforeSave($options = array() {
  2. if (!empty($this->data[$this->alias]['subcategory_id'])) {
  3. $category_id = $this->Category->find('first', array(
  4. 'conditions' => array(
  5. $this->alias . '.' . $this->primaryKey => $this->data[$this->alias]['subcategory_id']
  6. ),
  7. 'fields' => array(
  8. 'parent_id' // nazwa pola w ktorym jest przechowywana ID kategorii
  9. ),
  10. 'recursive' => -1
  11. )
  12.  
  13. $this->data[$this->alias]['category_id'] = $category_id['Category']['parent_id'];
  14. }
  15. }

Nietestowane...

Drugim rozwiązaniem jest ustawienie pola category_id jako ukrytego i za pomocą JS wstawić jego wartość, ale jest to niezalecane.

Ten post edytował kicaj 12.01.2014, 15:55:40


--------------------
CakePHP Developer
blog.kdev.pl

"Nadmiar wiedzy jest równie szkodliwy jak jej brak" Émile Zola
Go to the top of the page
+Quote Post
ZenekN
post 13.01.2014, 09:09:59
Post #3





Grupa: Zarejestrowani
Postów: 395
Pomógł: 5
Dołączył: 7.08.2012

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


Wielkie dzięki!!

Przyznam że nie pomyślałem że można to powiązać z funkcją find (chodziło mi coś po głowie ale nie do końca wiedziałem jak się za to zabrać)
Rozwiązałem to trochę inaczej bo w kontrolerze za pomocą warunków (conditions).

oraz

  1. $data = $this->data;
  2. $data['Product']['category_id'] = $category_id[0]['Subcategory']['category_id'] ;
  3. $this->Product->save($data);


Ten post edytował ZenekN 13.01.2014, 10:44:41
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 7.12.2019 - 12:20