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();
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.
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 ...
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();
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.