首页 > 解决方案 > 如何在 Laravel 中获取当前保存模型的 id

问题描述

在模型的 store() 方法上,我想再保存两个模型。我需要我正在存储的当前模型的 id。我怎么能得到那个?

控制器

public function store(Request $request, Property $property)
{
    /*******************************************************
     * Validation sent data
     * Validate e forme ersali user
     *******************************************************/

    $data = $request->validate([
        'type' => 'required',
        'title' => 'required',
        'description' => 'required',
        'base_capacity' => 'required',
        'max_occupancy' => 'required',
    ]);

    Property::create($data);

    PropertyDetail::create([
        'property_id' => 1,
        'state' => $request->state,
        'city' => $request->city,
        'address' => $request->address,
        'post_code' => $request->post_code,
        'placearea' => $request->place_area,
        'telephone' => $request->telephone,
    ]);
}

在这里,我在属性详细信息中对属性 ID 进行了硬编码。但是,我想获取我刚刚在其之上创建的当前属性的 id。

标签: phplaravel

解决方案


好的方法

  1. 创建一个实例Property
$property = Property::create($data);
  1. 参考它
PropertyDetail::create([
        'property_id' => $property->id, // here it is
        'state' =>$request->state,
        'city' =>$request->city,
        'address' =>$request->address,
        'post_code' =>$request->post_code,
        'placearea' =>$request->place_area,
        'telephone' =>$request->telephone,
    ]);

更安全的方法

更安全的方法几乎相同,除了您使用两个查询并且查询可能会失败。您要确保要么都成功,要么都不成功。为此,我们使用事务。

我们要确保安全的是确保数据进入数据库。


public function store(Request $request,Property $property)
{
    /*******************************************************
     * Validation sent data
     * Validate e forme ersali user
     *******************************************************/

    $data = $request->validate([
        'type' => 'required',
        'title' => 'required',
        'description' => 'required',
        'base_capacity' => 'required',
        'max_occupancy' => 'required',
    ]);

    \DB::transaction(function() use ($data, $request) {
        $property = Property::create($data);

        PropertyDetail::create([
            'property_id' => $property->id,
            'state' =>$request->state,
            'city' =>$request->city,
            'address' =>$request->address,
            'post_code' =>$request->post_code,
            'placearea' =>$request->place_area,
            'telephone' =>$request->telephone,
        ]);
    });
}

推荐阅读