Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [Kohana] Pobranie z bazy tylko jednego wiersza, jednej komórki itp
lorak110786
post
Post #1





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

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


Jako fan Peara i jego DB boli mnie że nie mogę (albo nie umiem) wyciągnąć tylko jednego wiersza za pomocą zapytania. Może najlepiej będzie na przykładzie. Załóżmy że chcę wyciągnąć sobie dane jakiegoś usera. W rezultacie spodziewam dostać tylko jeden wiersz. Robię w modelu (w uproszczeniu):

  1. public function getById($id) {
  2. return $this->db->query("SELECT * FROM users WHERE id_user = ?", $id)->result_array(false);
  3. }


Dostaję wtedy tablicę jednoelementową w której jest tablica z danymi usera, z której muszę wyłuskać ten jeden element. Czy jest jakiś sposób żeby dostać od razu tablicę z danymi usera? Dotychczas robiłem to używając array_pop():

  1. public function getById($id) {
  2. return array_pop($this->db->query("SELECT * FROM users WHERE id_user = ?", $id)->result_array(false));
  3. }


ale jest to rozwiązanie wg mnie nieeleganckie. Czy nie ma czegoś w stylu ->result_row()? Przekopałem dokumentację i pliki ale nic ciekawego nie było. Znalazłem coś takiego jak ->current() ale nie wiem czy to rozwiąże mój problem. Jak Wy sobie z tym radzicie?

Druga rzecz to przygotowywanie list do <selectów>. Mam tabelę userów, robimy zapytanie wyciągające id_user i login. Teraz chciałbym spreparować tak dane, żeby można je było wstawić do form::select. Muszę wszystko jeszcze raz przefeczować, wstawiając do indeksu tablicy id_user a do wartości jego login. W Pearze było to tak fajnie rozwiązane, że jeśli robiłem zapytanie "SELECT id_user, login FROM (...)" to id_user (w zasadzie pierwsza wybrana kolumna) mogła się od razu stać indeksem tablicy. Tu indeksy są z góry definiowane jako numeryczne. Czy można to jakoś zmienić? Jak Wy przygotowujecie tablicę z wartościami dla <selecta>?

Mowa o Kohana2.3.4, nie korzystam z ORM (na razie)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
thek
post
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




A więc aby dorwać się do wierszy to current, ale możesz też przewijać się między rekordami używając next i previous itd -> http://docs.kohanaphp.com/libraries/database/result
Jeśli chcesz do kolumny wyniku to jeśli wiesz, że wynik jest, odnosisz się do nazwy kolumny, a więc choćby $this->db->query('bla, bla')->current()->nazwa_kolumny


@bottom: niestety nie spotkałem się z taką funkcjonalnością o jakiej piszesz. Chyba będziesz musiał ją zaimplementować sam, dziedzicząc po db i rozszerzając tę klasę o ową funkcję. No i w wymaganej klasie to ją ustawiać jako domyślny model połączenia z bazą (IMG:style_emoticons/default/smile.gif) Na chwilę obecną nie widzę innego rozwiązania.
Powód edycji: [thek]: Dopisek dla kolegi poniżej.
Go to the top of the page
+Quote Post
lorak110786
post
Post #3





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

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


Cytat(thek @ 20.12.2010, 11:22:32 ) *
A więc aby dorwać się do wierszy to current, ale możesz też przewijać się między rekordami używając next i previous itd -> http://docs.kohanaphp.com/libraries/database/result
Jeśli chcesz do kolumny wyniku to jeśli wiesz, że wynik jest, odnosisz się do nazwy kolumny, a więc choćby $this->db->query('bla, bla')->current()->nazwa_kolumny

Dokumentację czytałem w pierwszej kolejności, więc wiem o tym:) Myślałem że jest jakiś sprytniejszy sposób nieopisany w dokumentacji (przeglądając pliki Kohany udało mi się już znaleźć kiedyś rzecz o której się nie mówi w dokumentacji a która jest użyteczna).

Co do kolumny, to nie zrozumiałeś mnie. Nie chcę wyciągnąć jednej wartości na podstawie kolumny, tylko całą kolumnę. Jeśli np. dam zapytanie "SELECT id_user, login FROM users" i użyję getCol to dostanę tablicę gdzie indeksami będą id_userów a wartościami loginy. W sam raz na wstawienie tego do <select> w widoku. W manualu peara ładnie to pokazano:
http://pear.php.net/manual/en/package.data...mmon.getcol.php
Go to the top of the page
+Quote Post
phpion
post
Post #4





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Cytat(lorak110786 @ 20.12.2010, 13:52:11 ) *
Jeśli np. dam zapytanie "SELECT id_user, login FROM users" i użyję getCol to dostanę tablicę gdzie indeksami będą id_userów a wartościami loginy. W sam raz na wstawienie tego do <select> w widoku.

ORM::select_list() Dopisanie tego do zwykłej klasy Database to przecież 2 minuty pracy.
Go to the top of the page
+Quote Post

Posty w temacie


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: 7.10.2025 - 05:27