HTML Code not working in @if condition Blade template Laravel 9?

Viewed 297

I want to show condition in datatable serverside like :

if STOK < 5 then STOK will be RED

here is my controller :

<?php

namespace App\Http\Controllers;

use App\Models\ModelProduk;
use Illuminate\Contracts\View\View;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Yajra\Datatables\Datatables;
use Illuminate\Support\Facades\Blade;

class Produk extends Controller
{
  public function index(Request $r)
    {   
     if ($r->ajax()) {
            $dataProduk = ModelProduk::join('kategori', 'produk.idkat', '=', 'kategori.idkat')
                ->join('satuan', 'produk.idsat', '=', 'satuan.idsat')
                ->select('produk.*', 'kategori.namakat', 'satuan.namasat')
                ->get();
            return Datatables::of($dataProduk)
                ->editColumn('stok', 'produk.stokColumn')
                ->addColumn('action', 'produk.actionTableIndex')
                ->toJson();
        };

        return View('produk.index');
    }
}

Problem SOLVED!!

just need add ->escapeColumns([]) in my controller, so my controller look like this :

public function index(Request $r)
    {

        if ($r->ajax()) {
            $dataProduk = ModelProduk::join('kategori', 'produk.idkat', '=', 'kategori.idkat')
                ->join('satuan', 'produk.idsat', '=', 'satuan.idsat')
                ->select('produk.*', 'kategori.namakat', 'satuan.namasat')
                ->get();
           
            return Datatables::of($dataProduk)
                ->editColumn(
                    'stok',
                    'produk.stokColumn'
                )
                ->escapeColumns([]) 
                ->addColumn('action', 'produk.actionTableIndex')
                ->make(true);
        };
       
        return View('produk.index');
    }

and this is stokColumn.blade.php :

@if ($stok < 5)
<span class="p-1 py-2 bg-red-700 text-white font-bold rounded-lg block hover:bg-slate-500">{!! $stok !!} </span>
@else
    {!! $stok !!}
@endif

the result :

enter image description here

Thanks everyone who answer my question

1 Answers

Try casting $stok to integer because it's probably a string.

@if ((int) $stok < 5)

Or using float can be safer

@if (floatval($stok) < 5)

Update

Since $stok is a collection, it's a good idea to use collection helpers, or convert it to array. I suggest you learn helpers, they are amazing. docs

What you need in your case is "count" method:

if ($stok->count() < 5)

If you want to work with array

$stok->toArray();
Related