Salut amis devs,

Aujourd'hui je suis confronté à un petit soucis avec une table pivot. Je dispose d'articles et d'images, je fais la liaison entre elles sans soucis. Mon soucis intervient au moment de définir une image en couverture d'un article. l'image se met en couverture avec un boolean dans la table pivot comme ceci :

id | article_id | media_id | is_cover (boolean)

Voici comment je synchronise mes médias avec mes articles :

$mediasIds = [];
        if( $this->request->has('medias') ) {
            foreach( $this->request->input('medias') as $key => $value ) {
                if( $this->request->has('is_cover') && $this->request->input('is_cover') == $value ) {
                    array_push($mediasIds, [$value => ['is_cover' => true]]);
                } else {
                    array_push($mediasIds, $value);
                }
            }

            //dd($mediasIds);

            $this->article->medias()->sync($mediasIds);
        }

Les champs sont bien renseignés, sans . j'obtiens cette erreur :

preg_replace(): Parameter mismatch, pattern is a string while replacement is an array

Je comprends l'erreur mais pourtant je suis bien la doc de laravel pour la synchronisation :/
Comment devrais-je formater mon tableau pour obtenir le résultat voulu ?

Voici le tableau des Ids si ça peut aider :

array:2 [
  0 => "20"
  1 => array:1 [
    21 => array:1 [
      "is_cover" => true
    ]
  ]
]

Merci par avance =)

5 réponses


arnich
Réponse acceptée

As tu essayer quelque chose dans le genre ?

if ($value == true){
    $mediaId[$key] = ['is_cover' => true];
} else {
    $mediaId[$key] = $key;
}

Personne n'a une idée ? :/

Si je ne me trompe pas ton tableau devrai plutot avoir la forme suivante :

array:2 [
   "20",
   "21" => ["isCover" => true]
   "23",
]

Oui tout à fait, le soucis c'est que je n'arrive pas à le formater de cette façon dans mon foreach

Exactement... Je me suis tellement entêté avec les fonctions de tableaux que j'en ai perdu mon php de base. Comme quoi quand on a la tête dans le guidon depuis plusieurs jours on fait rien de bon :/