Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [KOHANA] db, controller, widok, jak dodać nowe pole do obiektu zwróconego przez model
piespluto
post 17.12.2010, 16:29:56
Post #1





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 14.04.2010

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


Witam,
pobieram rekordy, przypuśćmy
  1. $test = new Model();
  2. $rekordy = $test->geAll();
  3. foreach($rekordy as $r)
  4. {
  5. // i tutaj chciałbym dodać nowe pole
  6. $r->nowe_pole = 'nowe pole';
  7. }

w kontrolerze Kohana pozwala to dodać, ale po przekazaniu do widoku już nie ma nowego pola..
Go to the top of the page
+Quote Post
thek
post 17.12.2010, 20:04:36
Post #2





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Źle, ponieważ $r jest lokalne dla pętli. Po wyjściu z niej zmiany nie będą widoczne. $rekordy nie zostają bowiem nadpisane tym wartościami. Musisz bowiem używać oryginalnej struktury $rekordy i do niej nawiązywać w pętli... Nie do lokalnej $r, która jest tylko kopią i w każdym przebiegu pętli jest niszczona. Nie wiem jak zwracasz strukturę (tablica czy obiekt) ale powinno być coś w stylu:
  1. foreach($rekordy AS $key => $value ) {
  2. $rekordy[$key]->nowe_pole = 'nowe_pole';
  3. }


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
melkorm
post 17.12.2010, 20:12:32
Post #3





Grupa: Zarejestrowani
Postów: 1 366
Pomógł: 261
Dołączył: 23.09.2008
Skąd: Bydgoszcz

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


Albo po prostu przez referencję.
  1. foreach($rekordy as &$r)


--------------------
Go to the top of the page
+Quote Post
piespluto
post 18.12.2010, 10:14:47
Post #4





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 14.04.2010

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


Zwracany jest obiekt:
  1. object(Mysql_Result)#16 (7) {
  2. ["fetch_type":protected]=>
  3. string(18) "mysql_fetch_object"
  4. ["return_type":protected]=>
  5. string(8) "stdClass"
  6. ["result":protected]=>
  7. resource(41) of type (mysql result)
  8. ["insert_id":protected]=>
  9. NULL
  10. ["sql":protected]=>
  11. string() ""
  12. ["current_row":protected]=>
  13. int(1)
  14. ["total_rows":protected]=>
  15. int(1)
  16. }


a jak iteruję to mogę zdecydować, albo notacja obiektowa:

  1. foreach($rekordy as $key => $value)
  2. {
  3. $rekordy[$key]->nowe_pole = 'nowe pole';
  4. }

nic nie zmienia..

albo tablicowa:
  1. foreach($rekordy as $key => $value)
  2. {
  3. $rekordy[$key]['nowe_pole'] = 'nowe pole';
  4. }

tutaj błąd: Indirect modification of overloaded element of Mysql_Result has no effect

iterowanie przez referencję też nie przejdzie

Ten post edytował piespluto 18.12.2010, 10:16:23
Go to the top of the page
+Quote Post
lorak110786
post 18.12.2010, 15:57:24
Post #5





Grupa: Nieautoryzowani
Postów: 34
Pomógł: 1
Dołączył: 22.06.2009
Skąd: Koszalin/Poznań

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


Jeśli dobrze rozumiem to $test->geAll(); zwraca Ci obiekt, zeby coś grzebać zwróć tablicę i spróbuj ją modyfikować. W modelu dla geAll() zrób returna:

  1. return $this->db->query($q)->result_array(false);

gdzie $q to zapytanie.
Go to the top of the page
+Quote Post
piespluto
post 19.12.2010, 12:29:32
Post #6





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 14.04.2010

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


Pisałem o tym wyżej, jak stosuję notację tablicową(czyli zwracam z modelu jak napisałeś):
  1. foreach($rekordy as $key => $value)
  2. {
  3. $rekordy[$key]['nowe_pole'] = 'nowe pole';
  4. }


to błąd: Indirect modification of overloaded element of Mysql_Result has no effect

Poratuje ktoś ?

Ten post edytował piespluto 18.12.2010, 17:46:28
Go to the top of the page
+Quote Post
melkorm
post 19.12.2010, 17:16:37
Post #7





Grupa: Zarejestrowani
Postów: 1 366
Pomógł: 261
Dołączył: 23.09.2008
Skąd: Bydgoszcz

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


  1. $query->result(FALSE);


Zwróci Tobie wtedy obiekty typu stdClass, lub w drugim parametrze możesz ustawić typ tablicy:
Kod
MYSQL_ASSOC, MYSQL_NUM, MYSQL_BOTH


A tak ogólnie to manual.

Ten post edytował melkorm 19.12.2010, 17:17:54


--------------------
Go to the top of the page
+Quote Post
piespluto
post 20.12.2010, 00:25:15
Post #8





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 14.04.2010

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


Piszę po raz trzeci, że korzystam z $query->result(false), ale potem przy próbie ustawienia nowego pola(indeksu dla tej tablicy):
  1. foreach($rekordy as $key => $value)
  2. {
  3. $rekordy[$key]['nowe_pole'] = 'nowe pole';
  4. }

Indirect modification of overloaded element of Mysql_Result has no effect
Go to the top of the page
+Quote Post
melkorm
post 20.12.2010, 08:58:06
Post #9





Grupa: Zarejestrowani
Postów: 1 366
Pomógł: 261
Dołączył: 23.09.2008
Skąd: Bydgoszcz

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


może to:
Kod
as_array ()


Ten post edytował melkorm 20.12.2010, 09:02:25


--------------------
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: 27.06.2025 - 21:02