Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][Laravel] Dane z mysql jako tablica (nie objekt)
Forum PHP.pl > Forum > Przedszkole
Octobus
Jak zmusic Laravel zeby wszystkie wyniki zapytan sql zwracal jako array ? Ponizsze zapytanie zwraca mi objekt
Kod
DB::table('moja_tablea')
->where('block_id', $data['block']->id)
>get();
nospor
google nie zamkneli...
https://stackoverflow.com/questions/2617426...object-to-array
Octobus
szukalem wielokrotnie i nie jest to (dla mnie) takie latwe, dodalem w __constructor():
  1. DB::setFetchMode(\PDO::FETCH_ASSOC);

w logach wyskakuje mi blad:
Kod
Call to undefined method Illuminate\Database\MySqlConnection::setFetchMode() {"exception":"[object] (Symfony\\Component\\Debug\\Exception\\FatalThrowableError(code: 0): Call to undefined method Illuminate\\Database\\MySqlConnection::setFetchMode() at [...]/vendor/laravel/framework/src/Illuminate/Database/DatabaseManager.php:349)
nospor
Pierwszy wyniki w google dla: laravel convert object to array

Co do bledu:
a nie mozesz tego odpalic bezposrednio przed zapytaniem?

Ewentualnie zmienic globalnie, jak rowniez napisno w linku, co ci podalem
// application/config/database.php

'fetch' => PDO::FETCH_CLASS,
// to
'fetch' => PDO::FETCH_ASSOC,
nospor
@viking nie lepiej jednak ustawic by od razu zwracalo tablice? Uzywajac toArray() mamy mase zbednych operacji po drodze. Owszem, toArray moze byc przydatne gdy zawsze pracujemy na obietkach i w jakims jednym momencie chcemy miec tablice, ale Octobus raczej na chwile obecna zawsze bedzie pracowal na tablicach
Octobus
Zawsze na tablicach i nie chce za kazdym razem zmieniac formatu z objektu na tablice ... Problem w tym ze wyczytalem ze laravel zablokowal taka funkcje (https://laravel.com/docs/5.4/upgrade), teraz trzeba inaczej:
Kod
Laravel no longer includes the ability to customize the PDO "fetch mode" from your configuration files. Instead, PDO::FETCH_OBJ is always used. If you would still like to customize the fetch mode for your application you may listen for the new Illuminate\Database\Events\StatementPrepared event:

  1. Event::listen(StatementPrepared::class, function ($event) {
  2. $event->statement->setFetchMode(...);
  3. });

a z racji tego ze dopiero zaczynam z Laravel nie jestem pewien gdzie to umiescic ... uzywam laravel 5.8
nospor
Mysle, ze to
https://laravel.com/docs/5.8/events
dosc jasno wyjasnia jak sie dodaje eventy wink.gif
Pyton_000
A możesz powiedzieć w czym Ci przeszkadza obudowanie w obiekty?
Octobus
@Pyton_000 bo zawsze uzywam tablic w swoim kodzie i teraz jak baza zwraca mi objekt non stop sie myle bo nie wiem czy zmienna w tablicy wielowymiarowej jest typu array czy object ... i ciagle mam bledy typu "Cannot use object of type stdClass as array" przez co pisanie aplikacji bardzo sie wydluza :/

Probowalem to zrobic, dodalem kod z mojego poprzedniego postu w app/Providers/EventServiceProvider.php w funckje boot(), przed linijka parent::boot(); ale to nic nie dalo, tak samo jak wszystkie inne rozwiazania ... nie udalo mi sie tego zrobic. Cos widocznie robie zle ale nie wiem co.
nospor
Cytat
przed linijka parent::boot()

Nie znam sie na laravel, ale w linku co ci dalem oni wkladaja PO a nie PRZED

Cytat
tak samo jak wszystkie inne rozwiazania
Raz ze nie wiemy jakie rozwiazania zrobiles, a dwa ze na 100% nie zrobiles wszystkich, bo jest takie, ktore na pewno dziala wink.gif
Pyton_000
Cytat(Octobus @ 10.01.2020, 11:33:42 ) *
@Pyton_000 bo zawsze uzywam tablic w swoim kodzie i teraz jak baza zwraca mi objekt non stop sie myle bo nie wiem czy zmienna w tablicy wielowymiarowej jest typu array czy object ... i ciagle mam bledy typu "Cannot use object of type stdClass as array" przez co pisanie aplikacji bardzo sie wydluza :/


To masz chyba coś skopane bo jak używasz eloquesnt to zwracane są obiekty Encji w kolekcji i oba można traktować jak array pomimo że są obiektami (collection jest Arrayable a Entity mają magic method pozwalające na dost. jako 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.