Raz Biswas
Raz Biswas

Reputation: 57

Loop over Laravel Collection

public function showJobCategoryContent($id){

     $jobsInfoById = DB::table('jobs')->where('category_id', '=', $id)->where('published', '=', 1)->paginate(3);

     // Imagine here i got 5 data

     foreach ($jobsInfoById as $jobInfoById) {
          return  $current=$jobInfoById->created_at;
        //$trialExpires []= $current->addDays(30);
     }
}

If i loop it it only show 1 data. How is it possible If use array sign then it will show 1 data.

Upvotes: 0

Views: 1011

Answers (1)

Hamoud
Hamoud

Reputation: 1929

If you want to get an array of all created_at dates, you don't need a loop.

public function showJobCategoryContent($id)
{

    $jobsInfoById = DB::table('jobs')->where('category_id', '=', $id)->where('published', '=', 1)->paginate(3);

    return $jobsInfoById->pluck('created_at');
}

Using the loop:

public function showJobCategoryContent($id)
{

    $jobsInfoById = DB::table('jobs')->where('category_id', '=', $id)->where('published', '=', 1)->paginate(3);

    $dates = [];
    foreach ($jobsInfoById as $jobInfoById) {
        $dates[] = $current = $jobInfoById->created_at;
    }

    return $dates;
}

If want to add 30 days to each date:

public function showJobCategoryContent($id)
{

    $jobsInfoById = DB::table('jobs')->where('category_id', '=', $id)->where('published', '=', 1)->paginate(3);

    $jobsInfoById = $jobsInfoById->map(function ($job) {
        return $job->created_at->addDays(30);
    });

    return $jobsInfoById->pluck('created_at');
}

Have a look at Laravel collections and how they can be useful: link

Upvotes: 1

Related Questions