Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [KOHANA] db, controller, widok
Forum PHP.pl > Forum > PHP > Frameworki
piespluto
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..
thek
Ź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. }
melkorm
Albo po prostu przez referencję.
  1. foreach($rekordy as &$r)
piespluto
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
lorak110786
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.
piespluto
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ś ?
melkorm
  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.
piespluto
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
melkorm
może to:
Kod
as_array ()
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.