Reputation: 117
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
Reputation: 1814
You can do
$count = Count::find(1);
$count->count += 1;
$count->save();
return $count;
Upvotes: 1
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
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