Reputation: 295
When I have started with the project using Laravel 5.7 and PHP 7.3, $info->id
returned correctly the last insert id. Now, I did some changes at the login file (all changes are here) and not at this files, but it doesn't work.
The gf_id in the table is autoincrement, the function $info->id return null.
I have tried to delete the row "public $incrementing = false;
" and to set it to false but there aren't any changes. I have tried with other function like $info->_id
or $this->id
and also have changed $info->save
with $info->create
but nothing, always null.
If I use getPrimaryKey return the error "Call to undefined method".
In the database the row is created correctly.
If I print the object $info with dd($info);
, the result is this:
GfTableModel {#233
#table: "gf_table"
#primaryKey: "gf_id"
+timestamps: false
+incrementing: false
#connection: "mysql"
#keyType: "int"
#with: []
#withCount: []
#perPage: 15
+exists: true
+wasRecentlyCreated: true
#attributes: array:5 [
"gf_user" => 5
"gf_new" => 1
"gf_data" => "2019-03-22 14:08:28"
"gf_object" => ""
"gf_text" => ""
]
#original: array:5 [
"gf_user" => 5
"gf_new" => 1
"gf_data" => "2019-03-22 14:08:28"
"gf_object" => ""
"gf_text" => ""
]
#changes: []
#casts: []
#dates: []
#dateFormat: null
#appends: []
#dispatchesEvents: []
#observables: []
#relations: []
#touches: []
#hidden: []
#visible: []
#fillable: []
#guarded: array:1 [
0 => "*"
]
}
This is my GfTableModel.php:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class GfTableModel extends Model
{
protected $table = 'gf_table';
protected $primaryKey = 'gf_id';
public $timestamps = false;
public $incrementing = true;
public function insertNewRow(){
$info = new GfTableModel();
$info->gf_user = auth()->id();
$info->gf_data = date("Y-m-d H:i:s");
$info->gf_new = 1;
$info->gf_object = "";
$info->gf_text = "";
$info->save();
return $info->id;
}
}
Where am I doing wrong? Could it be a problem given by the command php artisan config: cache
?
Thank you
Upvotes: 1
Views: 3423
Reputation: 1
I also face this problem. Solution is :
return $info->getKey();
This method is useful when you don't know the name of primary key field.
This method get the value of the model's primary key.
It will returns a integer primary key value which is inserted using $info->save();
method.
Upvotes: 0
Reputation: 76849
Replace this:
$info = new GfTableModel();
With:
$info = GfTableModel::create();
Upvotes: 0
Reputation: 4217
I ran into something similar. As of Laravel 5.7, 5.8 you can do this:
return $info->getKey();
This works regardless of the name of the primary key.
Upvotes: 2