Как получить идентификатор текущей сохраненной модели в Laravel

В методе store() модели я хочу сохранить еще две модели. Мне нужен идентификатор текущей модели, которую я храню. Как я могу это получить?

Контроллер

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,
    ]);
}

Здесь я жестко закодировал идентификатор свойства в деталях свойства. Однако я хочу получить идентификатор текущего свойства, которое я только что создал выше.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
0
493
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Нормальный подход

  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,
        ]);
    });
}

Рекомендуется использовать транзакции :)

Luis Brito 09.04.2019 22:41

хорошо, но когда я использую транзакцию, $requests становятся переменной undefined. спасибо за хороший ответ кстати

Farshad 09.04.2019 22:48

Это связано с областью действия функции, передайте $request внутренней функции \DB::transaction(function() use ($data, $request) {

Luis Brito 09.04.2019 22:54

Вы можете получить id из Property, используя модель, возвращаемую методом create, и использовать там, где вам нужно.

$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,
    ]);

Другие вопросы по теме