Laravel updateOrCreate avec la relation hasMany

J'ai des utilisateurs qui peuvent avoir plusieurs paramètres. Ceux-ci sont appelés par exemple user_param_1, user_param_2,..., user_param_n. C'est dynamique. Il s'agit d'une table distincte user_parameters, qui stocke l'id, l'user_id, le nom et la valeur. La relation est un namesTo et hasMany entre Users et UserParameters. Le problème est:

Lors de l'édition, je souhaite le conserver dynamiquement et si l'utilisateur a un user_param_n+1, il doit être créé. Mais j'ai déjà des problèmes pour écrire la condition des paramètres existants.

Je crée moi-même un tableau userParameters, qui ne contient à partir de la variable $request que les paramètres nécessaires. Le tableau ressemble à ceci :

[
0 => [
"name" => "par1"
"value" => "var1"
]
1 => [
"name" => "par2"
"value" => "var2"
]
2 => [
"name" => "par3"
"value" => "var3"
]
]

Ensuite, je veux le sauvegarder. Mon contrôleur connaît l'utilisateur, je peux donc accéder à $user->id.

foreach ($userParameters as $userParameter) {
$user->parameters()->updateOrCreate(['id' => $user->parameters->id, 'user_id' => $user->id], $userParameter);
}

Le problème est que $user->parameters est un tableau de modèles éloquents. La condition est fausse. Je ne peux pas accéder directement à l'identifiant. Mais comment puis-je le résoudre? J'ai besoin de quelque chose comme "['id' => [IF-DATABASE-ID-EXISTS-IN-ARRAY-$user-parameters]"... mais comment de manière éloquente ?

Merci d'avance!

Meilleures salutations


Solution du problème

Je pense que vous devez obtenir le paramètre existant en utilisant user_id et parameter_name car c'est l'unicité de cette ligne de paramètre, s'il n'y a pas de paramètre avec ce nom, il le créera avec user_id & parameter_name et parameter_value transmis à la fonction updateOrCreate

foreach ($parameters_from_request as $parameter) {
$user->parameters()
->updateOrCreate(
[
'name' => $parameter['name'],
'user_id' => $user->id
],[
'name' => $parameter['name'],
'value'=> $parameter['value']
]);
}

Commentaires

Posts les plus consultés de ce blog

Erreur Symfony : "Une exception a été levée lors du rendu d'un modèle"

Détecter les appuis sur les touches fléchées en JavaScript

Une chaîne vide donne "Des erreurs ont été détectées dans les arguments de la ligne de commande, veuillez vous assurer que tous les arguments sont correctement définis"