Home > front end >  How to get value from a collection base on key name condition?
How to get value from a collection base on key name condition?

Time:10-01

I am trying to get the value from a collection in PHP.

$todaylog variable contains a collection from a laravel query builder:

   $todaylog = [
   {
      "row_id":55,
      "emp_number":"IPPH0004",
      "timestamp":"03:30:23",
      "attendance_status":"Punch In",
      "date_created":"2021-10-01"
   },
   {
      "row_id":56,
      "emp_number":"IPPH0004",
      "timestamp":"11:32:50",
      "attendance_status":"Start Break",
      "date_created":"2021-10-01"
   },
   {
      "row_id":57,
      "emp_number":"IPPH0004",
      "timestamp":"11:33:09",
      "attendance_status":"End Break",
      "date_created":"2021-10-01"
   }
   ]

What I have done so far: but this approach is so slow:

$timein = DB::table('attendance')->select('timestamp')->where('attendance_status','Punch In')->get();

Now I want to have something like this: (PS this is only a pseudo code)

$timein = (where) $todaylog.attendance_status = "Punch In"
$endbreak = (where) $todaylog.attendance_status = "End Break"

Is this possible? or I have to query them to the database individually? Thanks

CodePudding user response:

What you need in Laravel is something like that:

$rows = collect([
       [
           "row_id" => 55,
          "emp_number" => "IPPH0004",
          "timestamp" => "03:30:23",
          "attendance_status" => "Punch In",
          "date_created" => "2021-10-01"
       ],
       [
           "row_id" => 56,
          "emp_number" => "IPPH0004",
          "timestamp" => "11:32:50",
          "attendance_status" => "Start Break",
          "date_created" => "2021-10-01"
       ],
        [
           "row_id" => 57,
          "emp_number" => "IPPH0004",
          "timestamp" => "11:33:09",
          "attendance_status" => "End Break",
          "date_created" => "2021-10-01"
       ]]);

    dd($rows->where('row_id', 57));

Result:

Illuminate\Support\Collection {#446 ▼
  #items: array:1 [▼
    2 => array:5 [▼
      "row_id" => 57
      "emp_number" => "IPPH0004"
      "timestamp" => "11:33:09"
      "attendance_status" => "End Break"
      "date_created" => "2021-10-01"
    ]
  ]
}

CodePudding user response:

you can use laravel collection where method:

collect($todaylog)->where("attendance_status", "Punch In")->first();
  • Related