Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ Przedszkole _ [PHP][Laravel] Dane z mysql jako tablica (nie objekt)

Napisany przez: Octobus 9.01.2020, 15:20:04

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();

Napisany przez: nospor 9.01.2020, 15:31:29

google nie zamkneli...
https://stackoverflow.com/questions/26174267/convert-laravel-object-to-array

Napisany przez: Octobus 9.01.2020, 15:40:31

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)

Napisany przez: nospor 9.01.2020, 15:42:40

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,

Napisany przez: viking 9.01.2020, 15:44:37

https://laravel.com/docs/6.x/eloquent-serialization#serializing-to-arrays

Napisany przez: nospor 9.01.2020, 15:47:42

@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

Napisany przez: Octobus 9.01.2020, 15:59:25

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

Napisany przez: nospor 9.01.2020, 16:02:27

Mysle, ze to
https://laravel.com/docs/5.8/events
dosc jasno wyjasnia jak sie dodaje eventy wink.gif

Napisany przez: Pyton_000 9.01.2020, 17:22:22

A możesz powiedzieć w czym Ci przeszkadza obudowanie w obiekty?

Napisany przez: 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 :/

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.

Napisany przez: nospor 10.01.2020, 11:38:52

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

Napisany przez: Pyton_000 10.01.2020, 21:19:33

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)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)