web-dev-qa-db-ja.com

Eloquent Push()とsave()の違い

私はlaravel 4つの雄弁についてのドキュメントを読んでおり、Push()の部分にかなり興味をそそられました。

モデルだけでなく、その関係もすべて保存したい場合があります。そのためには、Pushメソッドを使用できます。

モデルと関係の保存

$user->Push();

リンクはこちらをご覧ください

申し訳ありませんが、save()とPush()の違いは少しぼやけています。誰かが私のためにこれをクリアできることを願っています。ありがとうございました。

47
Melvin

舞台裏の魔法...

_/**
 * Save the model and all of its relationships.
 *
 * @return bool
 */
public function Push()
{
    if ( ! $this->save()) return false;

    // To sync all of the relationships to the database, we will simply spin through
    // the relationships and save each model via this "Push" method, which allows
    // us to recurse into all of these nested relations for the model instance.

    foreach ($this->relations as $models)
    {
        foreach (Collection::make($models) as $model)
        {
            if ( ! $model->Push()) return false;
        }
    }

    return true;
}
_

単にPush()が問題のモデルに関連するすべてのモデルを更新することを示しているので、リレーションシップのいずれかを変更した場合はPush()を呼び出し、そのモデルを更新し、関係のように...

_$user = User::find(32);
$user->name = "TestUser";
$user->state = "Texas";
$user->location->address = "123 test address"; //This line is a pre-defined relationship
_

ここにいるなら...

_$user->save();
_

その後、アドレスはアドレスモデルに保存されません。

_$user->Push();
_

次に、すべてのデータを保存し、アドレスをアドレス_table/model_に保存します。これは、その関係を_User model_で定義したためです。

Push()は、ユーザー/モデルのすべての関連モデルのすべてのupdated_atタイムスタンプも更新しますPush()

うまくいけば、それは物事をクリアします....

86
Kylie

あなたがこれをしたとしましょう:

$user = User::find(1);

$user->phone = '555-0101';
$user->address->Zip_code = '99950';

2つの異なるテーブルに変更を加えたので、それらを保存するには以下を行う必要があります。

$user->save();
$user->address->save();

または

$user->Push();

Push()は、リレーションと並んで既存のモデルインスタンスを更新して、新しいインスタンスを作成することはできません。簡単に言うと:Push()更新であり、挿入ではありません。

4
Alika Matthew