web-dev-qa-db-fra.com

Différence Eloquent Push () et save ()

J'ai lu laravel 4 documents sur l'éloquent et j'ai été assez intrigué par la partie Push (). Elle dit,

Parfois, vous souhaiterez peut-être enregistrer non seulement un modèle, mais également toutes ses relations. Pour ce faire, vous pouvez utiliser la méthode Push:

Enregistrement d'un modèle et de relations

$user->Push();

Voir le lien ici

Désolé mais c'est un peu flou de ma part la différence entre save () et Push (). J'espère que quelqu'un pourra effacer celui-ci pour moi. Merci.

47
Melvin

Voici la magie dans les coulisses ...

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

Il montre simplement que Push() mettra à jour tous les modèles liés au modèle en question, donc si vous changez l'une des relations, appelez Push() Il mettra à jour ce modèle et tous ses relations comme ça ...

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

Si ici vous venez ...

$user->save();

Ensuite, l'adresse ne sera pas enregistrée dans le modèle d'adresse .... Mais si vous ..

$user->Push();

Ensuite, il enregistrera toutes les données et enregistrera également l'adresse dans l'adresse table/model, Car vous avez défini cette relation dans User model.

Push() mettra également à jour tous les horodatages updated_at de tous les modèles associés de l'utilisateur/modèle que vous Push()

J'espère que cela clarifiera les choses ...

86
Kylie

Disons que vous avez fait ceci:

$user = User::find(1);

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

Vous venez d'apporter des modifications à deux tables différentes, pour les enregistrer, vous devez:

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

ou

$user->Push();
31

Push () ne peut être utilisé que pour mettre à jour une instance de modèle existante à côté de ses relations et non pour en créer une nouvelle. Dites simplement: Poussez () les mises à jour et ne les insérez pas.

4
Alika Matthew