177

新しいレコードを挿入する、または存在する場合は更新することの省略形は何ですか?

<?php

$shopOwner = ShopMeta::where('shopId', '=', $theID)
    ->where('metadataKey', '=', 2001)->first();

if ($shopOwner == null) {
    // Insert new record into database
} else {
    // Update the existing record
}
4

14 に答える 14

246

「lu cip」が話していた内容の完全な例を次に示します。

$user = User::firstOrNew(array('name' => Input::get('name')));
$user->foo = Input::get('foo');
$user->save();

以下は、Laravelの最新バージョンにあるドキュメントの更新されたリンクです

ドキュメントはこちら:更新されたリンク

于 2014-01-09T00:23:52.613 に答える
90

更新: 2014 年 8 月 27 日 - [updateOrCreateコアに組み込まれています...]

万一、まだこれに出くわしている場合に備えて...これを書いてから数週間後、これが実際にはLaravelのEloquentのコアの一部であることがわかりました...

Eloquent の同等のメソッドを掘り下げます。ここで見ることができます:

https://github.com/laravel/framework/blob/4.2/src/Illuminate/Database/Eloquent/Model.php#L553

オン:570 および:553

    /**
     * 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;
    }

以下の古い回答


次のような方法でこれを行うための組み込みの L4 機能があるかどうか疑問に思っています。

$row = DB::table('table')->where('id', '=', $id)->first();
// Fancy field => data assignments here
$row->save();

私は数週間前にこのメソッドを作成しました...

// Within a Model extends Eloquent
public static function createOrUpdate($formatted_array) {
    $row = Model::find($formatted_array['id']);
    if ($row === null) {
        Model::create($formatted_array);
        Session::flash('footer_message', "CREATED");
    } else {
        $row->update($formatted_array);
        Session::flash('footer_message', "EXISITING");
    }
    $affected_row = Model::find($formatted_array['id']);
    return $affected_row;
}

お役に立てば幸いです。誰かが共有できるものがあれば、これに代わるものを見てみたいです。@erikthedev_

于 2013-12-24T16:52:23.060 に答える
18

保存機能:

$shopOwner->save()

すでにやりたいことを...

Laravel コード:

    // If the model already exists in the database we can just update our record
    // that is already in this database using the current IDs in this "where"
    // clause to only update this model. Otherwise, we'll just insert them.
    if ($this->exists)
    {
        $saved = $this->performUpdate($query);
    }

    // If the model is brand new, we'll insert it into our database and set the
    // ID attribute on the model to the value of the newly inserted row's ID
    // which is typically an auto-increment value managed by the database.
    else
    {
        $saved = $this->performInsert($query);
    }
于 2013-09-17T09:26:35.380 に答える
6
$shopOwner = ShopMeta::firstOrNew(array('shopId' => $theID,'metadataKey' => 2001));

次に、変更を加えて保存します。firstOrNew は、見つからない場合は挿入を行わないことに注意してください。必要な場合は、firstOrCreate を使用してください。

于 2014-08-24T11:59:54.947 に答える
0

より多くのパラメーターを試してください。確実に見つかり、利用可能な場合は更新し、そうでない場合は新しいものを作成します

$save_data= Model::firstOrNew(['key1' => $key1value,'key'=>$key2value]);
//your values here
$save_data->save();
于 2021-02-18T11:50:37.377 に答える