S-o
S-o

Reputation: 117

Incrementing an integer in a controller with Laravel

I'm not sure how to increment an integer in the controller

This is the what I tried. I'm grabbing the code, adding one and then saving it. This generates the error: "Call to a member function save() on string"

I'm returning the count to see the results in the browser. Running $count = Count::find(1)->count in Tinker gives the correct amount.

public function update(Request $request, Count $count)
{
    $count = Count::find(1)->count;

    $addOne = $count + 1;

    $count->save();

    return ($count);
}

Could someone show me how this is not working and what I can do to fix this?

This is the migration:

 public function up()
  {
     Schema::create('counts', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->integer('count');
        $table->timestamps();
     });
 }

This is the Modal:

  <?php

  namespace App;

  use Illuminate\Database\Eloquent\Model;

  class Count extends Model
  {
      protected $fillable = [
        'count'
      ];
  }

Upvotes: 2

Views: 3599

Answers (3)

Jithesh Jose
Jithesh Jose

Reputation: 1814

You can do

  $count = Count::find(1);
  $count->count += 1;
  $count->save();
  return $count;

Upvotes: 1

nakov
nakov

Reputation: 14268

The accepted answer is good, but this could be achieved even easier with the helper method that Laravel provides.

so this code:

$count = Count::find(1);
$count->increment('count');

return $count;

will do the same.

Upvotes: 3

FunkyMonk91
FunkyMonk91

Reputation: 1481

The problem is you are storing the count property, not the object itself.

$count = Count::find(1);

$count->count += 1;

$count->save();

return ($count);

Should do the trick.

Some more defined naming might help as well. Had to do some mental gymnastics to wrap my head around what count I was counting.

Upvotes: 5

Related Questions