Comment puis-je mettre à jour les données avec Eloquent sans identifiant dans Laravel 4?
Lorsque je veux mettre à jour le FaqTrans
base de données, mais cette datase ont deux clé primaire (faq_ida et lang) $table->primary(array('lang', 'faq_id'));
. donc je n'ai pas besoin d'un id
colonne de type auto_increment.
Cependant, lorsque j'utilise le code suivant pour mettre à jour la base de données, le message d'erreur indicateur de moi il n'y a pas de id
colonne.
$faq_trans = FaqTrans::where('faq_id','=',$faq_id)->where('lang','=',$lang)->first();
$faq_trans->lang = Input::get('lang');
$faq_trans->body = Input::get('body');
$faq_trans->title = Input::get('title');
$faq_trans->save();
message d'erreur
SQLSTATE[42S22]: Colonne qui n'a pas trouvé: 1054 Unknown column 'id' dans 'où
la clause (SQL: mise à jourFAQtrans
ensemblebody
= ?,updated_at
= ? où
id
est null) (Fixations: array ( 0 => 'adfadaaadfadaa', 1 =>
'2013-07-04 11:12:42', ))
et quand j'ai ajouté une id
colonne, le code fonctionne très bien...
sont là de toute façon je peux mettre à jour la base de données sans l'ID de la colonne ?
source d'informationauteur Eugene Wang
Vous devez vous connecter pour publier un commentaire.
Laravel /Éloquent ne prend pas en charge les clés primaires composites.
Lorsque vous vérifiez l'Éloquent de la classe du Modèle, vous pouvez voir que la clé primaire ne peut être qu'une chaîne de caractères, qui est utilisé pour créer la clause where.
Écrire cette ligne dans votre Modèle
public $primaryKey = '_id';
Où _id est votre guide d'utilisation de la clé primaire
Pour n'importe qui qui bute sur cette question dans l'avenir (comme moi), voici une belle solution de contournement pour une clé primaire composite dans Éloquent.
Ce qui se passe au-dessus de votre classe de modèle:
Puis vous remplacez le
save()
méthode sur votre modèle:Source originale: https://github.com/laravel/framework/issues/5517#issuecomment-52996610
Mise à jour 2016-05-03
Mon nouveau favori façon de le faire:
Comment je peux mettre des clés composites dans des modèles dans Laravel 5?
Assez simple:
Aller à votre
FaqTrans
modèle et ajouter ce.Qui devrait le faire, en supposant que
faq_id
est plus important que lelang
Si quelqu'un a le même problème.
J'ai utilisé Nishchit Dhanani réponse et cela a fonctionné assez bien ce qui a été:
Écrire cette ligne dans votre Modèle
public $primaryKey = '_id';
Où _id est votre guide d'utilisation de la clé primaire
Pour mon cas. J'ai eu une table utilisateur et une partie de mes utilisateurs sont des étudiants. Donc, la clé primaire de ma table étudiants a été "user_id".
En ajoutant cette ligne dans mon Élève modèle: public $primaryKey = 'user_id';
J'ai été en mesure d'utiliser la méthode save() lors de la mise à jour de mon étudiant de l'objet.
Espère que cette aide