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

La fonction GCP Cloud pour écrire des données dans BigQuery s'exécute avec succès, mais les données n'apparaissent pas dans la table BigQuery

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

Le shell POSIX (sh) redirige stderr vers stdout et capture stderr et stdout dans des variables