skip to Main Content

I loop trough an eloquent Collection and I want to add the data to another Collection called "$tagCollection". If an entry with the same tag_id already exists I only want to increase the rating-column for the existing entry.
At the moment it looks like this. Has anyone an Idea?

$tagCollection = collect();

$entries->each(function($entry) use($tagCollection){
   $tagId = $entry->tag_id;

   //something like this
   if($tagCollection->contains('tag_id', $tagId)){
      $tagCollection->update ('rating' => $oldRating + 0.5)
    } else{
        $tagCollection->push(array(
            'tag_id' => $tagId,
            'rating' => 0.35
        ));
    }

 });

I also tried to use ->pull() to remove the Item out of the Collection and then push it again with the new rating but I also do not know how

2

Answers


  1. If the end goal is to update all the entries present in $entries that belong to a specific $tagId, then you can do this

    $entryIds = $entries->where('tag_id',$tagId)->pluck('id')->toArray();
    Entry::whereIn('id', $entryIds)->update(['rating' => DB::raw('rating + 0.5')]);
    

    And thats it.

    Login or Signup to reply.
  2. Can you do it with array instead of collection? For example:

    $tagArray = [];
    $entries->each(function ($entry) use (&$tagArray) {
        if (isset($tagArray[$entry['tag_id']])) {
            $tagArray[$entry['tag_id']] += 0.5;
        } else {
            $tagArray[$entry['tag_id']] = 0.35;
        }
    });
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search