Laravel Model::updateOrCreate

Рейтинг: 3Ответов: 1Опубликовано: 03.10.2014

Добрый день народ.

Подскажите, кто знает, как работает Model::updateOrCreate() в Laravel(4.2)

Ответы

▲ 8

Пытается найти первую запись на основании переданных $attributes, если не найдет - создаст. Потом заполняет данными из $values и сохраняет.

Пример использования:

$book = Book::updateOrCreate(
    ['isbn' => '9780451157485'], 
    ['title' => 'Атлант расправил плечи']);

Если книги с указанным ISBN нет, то будет. В любом случае, title будет таким, как указано.

Источник:

// vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php:553,570

/**
 * Create or update a record matching the attributes, and fill it with values.
 *
 * @param  array  $attributes
 * @param  array  $values
 * @return static
 */
public static function updateOrCreate(array $attributes, array $values = array())
{
    $instance = static::firstOrNew($attributes);

    $instance->fill($values)->save();

    return $instance;
}

/**
 * Get the first record matching the attributes or instantiate it.
 *
 * @param  array  $attributes
 * @return static
 */
public static function firstOrNew(array $attributes)
{
    if ( ! is_null($instance = static::where($attributes)->first()))
    {
        return $instance;
    }

    return new static($attributes);
}