Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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'
      ];
  }
like image 577
S-o Avatar asked May 15 '26 16:05

S-o


2 Answers

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.

like image 106
FunkyMonk91 Avatar answered May 17 '26 05:05

FunkyMonk91


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.

like image 42
nakov Avatar answered May 17 '26 05:05

nakov



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!