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
Enregistrer un commentaire