skip to Main Content

display json type data in a blade
I have a table in my DB where I store data and one of those data is of the json type, and everything goes well for me, but the problem starts when I want to display those json in a blade
this is my json data type
[![enter image description here][1]][1]

where in my blade I make the query with php that all the data that has the same id of an order is extracted and displayed but I want to display the json data where I do this foreach

<div class="modal-body">
    <?php
    $order[] = $ord_com->id;
    $tareasco = DB::table('tareas')->whereIn('orden_compra_id',$order)->orderBy('created_at','desc')->get();
    ?> 
    @foreach($tareasco as $audi)
        {{ $audi->componente_id }}<!--here it shows me everything ok-->
        @if (is_array($audi->componente_id) || is_object($audi->componente_id))
            @foreach ($audi->componente_id as $documen)
                <h1>{{$documen['partidas_id']}}</h1>
            @endforeach
        @endif
    @endforeach
</div>

in the second foreach where I want to show the json data does not show me any data

EDIT:

in the second foreach where I want to show the json data does not show me any data y creo que es porque llamo mal los datos porque al hacer lo recomendado no me muestra nada

[{"id": 9913, "cantidad": "12", "costoini": "12", "partidas_id": "1", "servicios_id": "1077", "componente_id": "1", "sub_componente_id": "1", "sub_sub_componentes_id": "1"}] [{"id": 2548, "cantidad": "2", "costoini": "123", "partidas_id": "1", "servicios_id": "1077", "componente_id": "1", "sub_componente_id": "1", "sub_sub_componentes_id": "1"}, {"id": 7555, "cantidad": "4", "costoini": "124", "partidas_id": "2", "servicios_id": "1078", "componente_id": "1", "sub_componente_id": "1", "sub_sub_componentes_id": "1"}]

3

Answers


  1. If you use the Model and that column is of type json instead of using the DB: query builder the column will be seen as an array inside Laravel (and the blade)

    Then you can just treat it like a standard array.

    @foreach($tareasco as $audi)
       <!-- your looped items -->
    @endforeach
    

    I find its good practice to rely on the Eloquent and Models

    Login or Signup to reply.
  2. You need to either use json_decode to turn that json array into an array of arrays (json_decode($json, true)) or an array of objects (json_decode($json))

    @php($tareasco = DB::table('tareas')->whereIn('orden_compra_id',$order)->orderBy('created_at','desc')->get())
    @foreach($tareasco as $audi)
        @php($componente_id = json_decode($audi->componente_id))
        @if (is_array($audi->componente_id))
            @foreach ($audi->componente_id as $documen)
                <h1>{{ $documen->partidas_id }}</h1>
            @endforeach
        @endif
    @endforeach
    
    @php($tareasco = DB::table('tareas')->whereIn('orden_compra_id',$order)->orderBy('created_at','desc')->get())
    @foreach($tareasco as $audi)
        @php($componente_id = json_decode($audi->componente_id, true))
        @if (is_array($audi->componente_id))
            @foreach ($audi->componente_id as $documen)
                <h1>{{ $documen['partidas_id'] }}</h1>
            @endforeach
        @endif
    @endforeach
    

    A better option would be to define that behavior in the $cast property of an Eloquent Model.

    class Tarea extends Model
    {
        protected $casts = [
            'componente_id' => 'array'
        ];
    }
    
    $tareasco = Tarea::whereIn(...)->orderBy(...)->get();
    
    @foreach($tareasco as $audi)
        @if (is_array($audi->componente_id))
            @foreach($audi->componente_id as $documen)
                {{ $documen['partidas_id'] }}
            @endforeach
        @endif
    @endforeach
    
    Login or Signup to reply.
  3. If you need to access it as JSON in foreach, you should access it like an Object, not an array.

    <h1>{{$documen->partidas_id}}</h1>
    

    For Your Information

    When we use Laravel Framework, we don’t write fetch commands in view. like this

    <?php
        $order[] = $ord_com->id;
        $tareasco = DB::table('tareas')->whereIn('orden_compra_id',$order)->orderBy('created_at','desc')->get();
    ?> 
    

    We use MVC (Model View Controllr ) architecture to manipulate data.

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search