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'
      ];
  }

3 Answers

4
FunkyMonk91 On Best Solutions

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.

1
nakov On

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.

0
Community On

You can do

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