Intereting Posts
Mysql в PHP – как обновить только одну строку в таблице, но с наибольшим номером id MySQL EXISTS возвращает 1 или 0 Как проверить данные пользователя с помощью PHP, извлекая данные из базы данных SQLite3? PHP ArrayAccess множество многомерных Объединительные запросы объединения Mysql Исключение определенного шаблона из выражения регулярного выражения конвертировать XML-данные в mysql-запрос на вставку / обновление, используя php 404 страница не найдена ошибка PHP / MYSQL допускает только один голос на одного члена? простая почтовая рассылка php, не отправляющая электронную почту Замена для файла :: mime () в Laravel 4 (для получения типа mime из расширения файла) Предотвращение множественных записей с помощью PHP PHP: синтаксическая ошибка, неожиданная '[' Как мы можем получить конкретные ссылки, используя простой html dom Простой пример для публикации на странице фан-сайта Facebook через PHP?

Laravel: создать или обновить связанную модель?

Пожалуйста, будьте осторожны со мной – я Laravel noob.

Поэтому в настоящее время я просматриваю нагрузку пользователей, решив, нужно ли мне обновлять связанную модель (UserLocation).

Я дошел до создания UserLocation, если он нуждается в создании, и после некоторого шага, я пришел к следующему:

$coords = $json->features[0]->geometry->coordinates; $location = new UserLocation(['lat'=>$coords[1],'lng'=>$coords[0]]); $user->location()->save($location); 

Моя проблема заключается в том, что во второй раз местоположение может потребовать обновления, и строка уже будет существовать для этого пользователя.

Является ли это автоматически, или мне нужно делать что-то другое?

Код читается так, как будто он создает новую строку, поэтому не будет обрабатывать случай необходимости ее обновления?

Обновление – решение:

Благодаря Мэтью, я придумал следующее решение;

 $location = UserLocation::firstOrNew(['user_id'=>$user->id]); $location->user_id = $user->id; $location->lat = $coords[1]; $location->lng = $coords[0]; $location->save(); 

Solutions Collecting From Web of "Laravel: создать или обновить связанную модель?"

Вам следует обратиться к Документам API Laravel . Я не думаю, что они упоминают эти методы в «обычных документах», хотя я понимаю, почему вы, возможно, этого не видели.

Вы можете использовать методы firstOrNew или firstOrCreate .

firstOrNew: получить первую запись, соответствующую атрибутам или создать экземпляр.

firstOrCreate: получить первую запись, соответствующую атрибутам или создать ее.

Например:

 $model = SomeModel::firstOrNew(['model_id' => 4]); 

В приведенном выше примере, если модель с model_id из 4 не найдена, она создает новый экземпляр SomeModel . Затем вы можете манипулировать, а затем ->save() . Если он найден, он возвращается.

Вы также можете использовать firstOrCreate , который вместо создания нового экземпляра модели немедленно firstOrCreate новую модель в таблицу.

Итак, в вашем случае:

 $location = UserLocation::firstOrNew(['lat'=>$coords[1],'lng'=>$coords[0]]); 

$ location будет содержать существующую модель из БД или новый экземпляр с атрибутами lat и lng установленными в $coords[1] и $coords[0] соответственно, которые затем можно сохранить или установить дополнительные значения атрибутов, если это необходимо.

Другой пример:

 $location = UserLocation::firstOrCreate(['lat'=>$coords[1],'lng'=>$coords[0]]); 

$ location будет либо содержать существующую модель из БД, либо новую модель с вновь установленными атрибутами, за исключением того, что модель будет уже записана в таблицу, если она не найдена.