Hello all !

J'aimerai enregistrer plusieurs checkbox dans ma bdd mais je n'arrive pas a faire le traitement ...

Je ne sais pas si je doit utiliser le HasAndBelongsToMany ou le traitement directement dans mon controller.

Voici le multiple checkbox :

<?php echo $this->Form->input('category_id', array('label'=>false,'div'=>false,'type'=>'checkbox','checked'=>true,"multiple"=>"checkbox"));?>

et le résultat me donne un array

Error: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'Array' in 'field list'
SQL Query: INSERT INTO `bdd`.`posts` (`slug`, `user_id`, `name`, `category_id`) VALUES ('fdef', 1, 'fdef',Array)

Et j'ai aussi une erreur du style :

Notice (8): Array to string conversion [CORE/Cake/Model/Datasource/DboSource.php, line 1001]

Merci par avance pour votre aide :)

4 réponses


Piverte
Réponse acceptée

Lis cette page du cookbook. Il faut utiliser la méthode save.

Salut,
tu devrais commencer par relire le paragraphe sur les multiples checkbox du cookbook (cherche "$attributes'multiple']" dans la page).
Ici tu as déclaré que tu allais donner un tableau de checkbox, mais tu n'as pas donner ces checkbox, la requête SQL t'affiches donc un tableau vide (il faut lire l'erreur). Pour cela regarde le champs $options dans l'exemple donnée dans l'exemple ci-dessous tiré du cookbook :

$options = array(
    'Value 1' => 'Label 1',
    'Value 2' => 'Label 2'
);
echo $this->Form->select('Model.field', $options, array(
    'multiple' => 'checkbox'
));

Pour ce qui est des relations entre tables il faudrait que tu nous décrives ce que tu veux faire. Même si la structure actuelle de ta base de donnée semble laisser croire que tu as une relation category hasMany post et post belongsTo category.

Piverte

Antho
Auteur

Merci pour ta réponse Piverte !

J'ai changé mon checkbox en ca :

<?php echo $this->Form->input('tags', array('type' => 'select', 'multiple' => 'checkbox', 'options' => $categories, 'selected' => $categories)); ?>

Voici mon code dans le Model

public function afterSave($created){
        $selected = $this->data'Annonce']'tags'];
        debug($this->data);
    }

Voici le debug

array(
    'Annonce' => array(
        'slug' => 'checkbox',
        'user_id' => '2',
        'name' => 'checkbox',
        'tags' => array(
            (int) 0 => '2',
            (int) 1 => '3',
            (int) 2 => '6'
        ),
        'id' => '44'
    )
)

Donc maintenant j'aimerai faire un INSERT en BDD. J'ai bien créer un HasAndBelongsToMany et j'arrive à lire quand j'insere manuellement mais je ne sais pas comment je peux faire mon INSERT.

Merci par avance.

Antho
Auteur

Effectivement il faut utiliser la methode save avec un create avant. Et j'avais oublier de lier par hasmany ModelAModelB ...

Merci pour ton aide en tout cas ^^