Comment mettre à jour un tableau croisé dynamique à l'aide de Éloquente dans laravel 5
Je suis nouveau sur laravel. Je suis en train de travailler sur un laravel 5 app et je suis coincé ici. J'ai 2 modèles en tant que tel:
class Message extends Eloquent{
public function user()
{
return $this->belongsTo('App\User', 'from');
}
public function users()
{
return $this->belongsToMany('App\User')->withPivot('status');
}
}
class User extends Eloquent {
public function messages()
{
return $this->hasMany('App\Message', 'from');
}
public function receive_messages() {
return $this->belongsToMany('App\Message')->withPivot('status');
}
}
Il existe plusieurs-à-plusieurs relation entre le Message et l'Utilisateur de me donner un tableau croisé dynamique en tant que tel:
Table Name: message_user
Colums:
message_id
user_id
status
J'ai une requête SQL en tant que tel:
update message_user
set status = 1
where user_id = 4 and message_id in (select id from messages where message_id = 123)
Comment puis-je traduire cette requête à la laravel équivalent?
- Mec qu'entendez-vous par
from
? - Clé étrangère @Mohamed
- mec le deuxième argument est la conjonction nom de la table, dans votre exemple, il devrait être "message_user' , le total de la juste relation de messages dans Utilisateur modèle :
return $this->hasMany('App\Message\,'message_user','user_id','message_id');
- Pas de mec. Il vous manque le point. Découvrez la laravel de la documentation. Cela peut aider: laravel.com/docs/5.1/eloquent-relationships#many-to-many
- les docs a quelque chose comme ceci: return $this->hasMany('App\de Commentaires', 'foreign_key', 'local_key');
- copain je viens de vérifier, j'en suis sûr, dans le même lien que vous avez de m'envoyer de recherche de cette s'il vous plaît:
return $this->belongsToMany('App\Role', 'user_roles', 'user_id', 'role_id');
from
est surreturn $this->belongsTo('App\User', 'from');
sur mon post. Regarder le post de nouveau. C'est sur la relation 1 à plusieurs.- Ok j'ai trouvé, désolé, maintenant, pourriez-vous expliquer comment vous souhaitez que l'un de nombreux et des de nombreux de nombreux les relations entre les deux tables?
users
,messages
- Merci pour l'entrée mec. Un utilisateur peut créer 1 ou plusieurs messages. Un message peut être reçu par 1 ou plusieurs utilisateurs. Un utilisateur peut recevoir 0 messages ou plus.
Vous devez vous connecter pour publier un commentaire.
Le code ci-dessous résolu mon problème:
Vous pouvez utiliser l'une de ces deux fonctions,
sync()
attach()
et la différence en un mot, c'est que la Synchronisation d'obtenir la matrice de son premier argument et le synchroniser avec le tableau croisé dynamique (supprimer et ajouter les clés passées en votre tableau) ce qui signifie que si vous avez 3,2,1 valorisés au sein de votre table de jonction, et est passé de synchronisation avec les valeurs de, 3,4,2, synchroniser automatiquement supprimer la valeur 1 et ajouter de la valeur 4 pour vous. où Joindre prendra seule valeur de l'ID deL'ESSENTIEL: si vous souhaitez ajouter des valeurs à votre table de jonction, le passe comme deuxième argument de
sync()
comme suit:sync()
fonctionne 🙂false
drapeau danssync()
appel de méthode. Parce que si c'est pas passé, tous les autres registres différents de courant $message->id sera détachée. Notez également que lorsque nous attacher, appel de méthode estattach( $id, ['attr1' => 'val1'])
mais àsync()
appel, nous avonssync([$id **=>** ['attr1' => 'val1']]);
Laravel 5.8
Tout d'abord, permettre à votre pivot colonnes pour être consultable par le chaînage de la
withPivot
méthode à votrebelongsToMany
Copié à partir de mon propre code pour gagner du temps
Le problème, c'est que votre tableau croisé dynamique a besoin d'avoir un primaire
'id'
clé.Si vous ne voulez pas cela, alors vous pouvez essayer ce qui suit:
4ème mise à Jour juillet mise à Jour à l'extrait ci-dessus.
Ce sera le travail pour le tableau croisé dynamique qui n'ont pas de primaire incrément automatique de l'id. sans un incrément automatique de l'id, l'utilisateur ne peut pas mettre à jour,insérer,supprimer une ligne dans le tableau croisé dynamique en accédant directement.
Pour la mise à Jour de votre tableau croisé dynamique, vous pouvez utiliser updateExistingPivot méthode.