2016-04-20 1 views
1

J'ai une table, sa touche unique est app_id + channel_id mais elle n'a pas de clé primaire.Comment écrire "sur une mise à jour de clé en double" pour Laravel 5.2 modèle éloquent?

Je veux utiliser la déclaration on duplicated key update pour insérer/mettre à jour un champ last_update_time dans Laravel modèle éloquent, j'ai trouvé méthode updateOrCreate mais ce n'est pas reconnu dans mon projet, comment dois-je écrire mon modèle?

+0

veuillez vérifier ceci https://laracasts.com/discuss/channels/general-discussion/insert-on-duplicate-key-update –

Répondre

0

De Laravel Documentation (voir here dernière partie) Il existe deux méthodes Laravel:

Autre création Méthodes

Il y a deux autres méthodes que vous pouvez utiliser pour créer des modèles par attributs attribution de masse: firstOrCreate et firstOrNew. La méthode firstOrCreate tentera de localiser un enregistrement de base de données à l'aide des paires colonne/valeur données. Si le modèle ne peut pas être trouvé dans la base de données, un enregistrement sera inséré avec les attributs donnés.

La méthode firstOrNew, comme firstOrCreate, tente de localiser un enregistrement dans la base de données correspondant aux attributs donnés. Cependant, si un modèle n'est pas trouvé, une nouvelle instance de modèle sera renvoyée. Notez que le modèle renvoyé par firstOrNew n'a pas encore été conservé dans la base de données. Vous devrez appeler enregistrer manuellement persister il:

// Retrieve the flight by the attributes, or create it if it doesn't exist... 

$flight = App\Flight::firstOrCreate(['name' => 'Flight 10']); 

// Retrieve the flight by the attributes, or instantiate a new instance... 

$flight = App\Flight::firstOrNew(['name' => 'Flight 10']); 
+0

Mais pourquoi je ne peux pas utiliser cette méthode? comme 'firstOrCreate', je suis juste un modèle étend' Illuminate \ Database \ Eloquent \ Model' – Phoenix

0

Avez-vous essayé updateOrCreate(array $attributes, array $values = [])? Tant que vous utilisez une table qui a une colonne id à incrémentation automatique, vous pouvez utiliser votre Model::updateOrCreate() avec le premier argument comme tableau associatif composé des attributs que vous recherchez, et le second argument comme tableau associatif avec de nouvelles valeurs.

Voir la définition de méthode pour updateOrCreate.