Laravel 5.5:插入后获得id

时间:2018-03-12 18:11:27

标签: php laravel laravel-5

我有一个模型hotel.php使用create()插入酒店data.insert数据但是它没有返回id,返回的集合没有id字段!

  

Controller.php这样


WHERE
_TABLE_SUFFIX >= '170312'
Group by Month
  

hotel.php(型号)

/** "/user/2/create" */        
public function store(User $user, HotelRequest $request) 
        { 

            $slug = (new hotel)->uniqueSlug( $request->name );

            $request->merge([ 
                    'cat_id' => 1,
                    'slug' => $slug,
                    'created_by' => auth()->user()->id,
                ]); 

            $hotel = $user->hotels()->create( $request->all() ); 
            dd($hotel);
    ................
  

User.php(型号)

    namespace App;
    use Illuminate\Http\UploadedFile;
    use Illuminate\Database\Eloquent\Model;

    class hotel extends Model
    {
        protected $fillable = ['name', 'description','address','street','city','email',
'phone','web','cat_id','slug','created_by'];

        protected  $primaryKey = 'slug'; 

        /** 
            unique slugs genarating
        */
        protected $slug_guards = ['create','room'];

        public $incrementing = false;

和最终结果 enter image description here

它没有id属性。我需要id来上传图片!

注意:我将该主键更改为默认的“id”,但结果没有变化。 enter image description here

  

Create_hotels ...迁移

public function hotels( )
{
    return $this->hasmany('App\Hotel');
}

5 个答案:

答案 0 :(得分:1)

您的酒店型号将主键设置为slug:

    protected  $primaryKey = 'slug'; 

我通常做的是,对于我的所有迁移,我设置了如下的自动增量:

$table->increments('id');

这样,laravel会为你处理一切。每个创建,更新或任何方法处理您的项目的ID。

这样,您就可以这样返回存储数据的id:

$id = create($data)->id;

其中$data是具有新数据的模型。 $id现在应包含最新存储的模型数据的id值。

答案 1 :(得分:0)

您必须更改Hotel模型(或删除整行):

public $incrementing = true;

答案 2 :(得分:0)

您正在将刚插入的数据转储到不包含id字段的数据库中。

在Controller类中创建一个show方法,如下所示

public function show(User $user){
    dd($user)
} 

的路线如下:

Route::get('user/{user}', 'Controller@show')

答案 3 :(得分:0)

hotel.php声明之前protected $fillable尝试添加

protected $guarded = [
    'id',
];

store()

之后的控制器$slug = (new hotel)->uniqueSlug( $request->name );方法中

尝试添加$slug->save();然后返回的slug应该返回ID

和/或可能在行之后采用相同的类似策略

$hotel = $user->hotels()->create( $request->all() );

添加$hotel->save();

答案 4 :(得分:0)

我将主键更改为默认id,并将$incrementing = true;更改为已创建数据的id。我在Controller

中更改了整个方法