Bonjour,

je suis entrain de créé un systeme de tag pour mon site et j'ai toujours les donnée qui sont tojour vide.

mon Code

<?php
namespace Taxonomy\Model\Behavior;

use Cake\Event\Event;
use Cake\ORM\Behavior;

class TaxonomyBehavior extends Behavior
{

    public function initialize(array $config)
    {
        // assocation
        $this->_table->belongsToMany('Terms', [
            'foreignKey' => 'ref_id',
            'clasName'  => 'TermsR',
            'joinTable' => 'terms_relationships',
            'conditions' => array('TermsR.ref' => "Post")
        ]);
    }

    public function beforeSave(Event $event, $data) {
        debug($data); die;
    }
}

<?php
namespace Taxonomy\Model\Table;

use Cake\ORM\Query;
use Cake\ORM\RulesChecker;
use Cake\ORM\Table;
use Cake\Validation\Validator;

class TermsRTable extends Table
{

    public function initialize(array $config)
    {
        parent::initialize($config);

        $this->setTable('terms_relationships');
        $this->setDisplayField('id');
        $this->setPrimaryKey('id');

        $this->belongsTo('Taxonomy.Terms', [
            'className' => 'Taxonomy\Model\Table\TermsTable',
            'foreignKey' => 'term_id',
        ]);
    }

    public function validationDefault(Validator $validator)
    {
        $validator
            ->integer('id')
            ->allowEmpty('id', 'create');

        $validator
            ->scalar('ref')
            ->maxLength('ref', 255)
            ->requirePresence('ref', 'create')
            ->notEmpty('ref');

        return $validator;
    }

    public function buildRules(RulesChecker $rules)
    {
        $rules->add($rules->existsIn(['term_id'], 'Terms'));

        return $rules;
    }
}

<?php
namespace Taxonomy\Model\Table;

use Cake\ORM\Query;
use Cake\ORM\RulesChecker;
use Cake\ORM\Table;
use Cake\Validation\Validator;

class TermsTable extends Table
{

    /**
     * Initialize method
     *
     * @param array $config The configuration for the Table.
     * @return void
     */
    public function initialize(array $config)
    {
        parent::initialize($config);

        $this->setTable('terms');
        $this->setDisplayField('name');
        $this->setPrimaryKey('id');

        $this->hasMany('Taxonomy.TermsR', [
            'className' => 'Taxonomy\Model\Table\TermsRTable',
            'foreignKey' => 'term_id',
            'dependent' => true,
        ]);
    }

    public function validationDefault(Validator $validator)
    {
        $validator
            ->integer('id')
            ->allowEmpty('id', 'create');

        $validator
            ->scalar('name')
            ->maxLength('name', 255)
            ->requirePresence('name', 'create')
            ->notEmpty('name');

        $validator
            ->scalar('type')
            ->maxLength('type', 255)
            ->requirePresence('type', 'create')
            ->notEmpty('type');

        return $validator;
    }
}

j'aime bien envoyer les données dans le data

Ce que j'obtiens

    'id' => (int) 10,
    'name' => 'article de test',
    'slug' => 'article',
    'content' => '<p>article de test</p>',
    'online' => (int) 1,
    'image' => '4a44048cfbbd26c295e36177789c74e4.jpg',
    'terms' => []

le tableau terms est tojours vide malgré que j'ai bien selectioner les données.

Merci d'avance

2 réponses


Lartak
Réponse acceptée

Bonjour.
@tincode: Dans ce cas là il n'en a pas besoin étant donné qu'il a créé un Behavior et que celui-ci attache automatiquement la table à son modèle.
@msahel arbi: J'avais déjà regardé ton sujet et je n'avais pas compris d'où pouvait venir ton problème, mais je viens de remarquer que tu avais fait une erreur.
Dans la définition de l'association de ton Behavior, tu as mal défini le className, tu as écrit clasName au lieu de className.

Salut merci de préciser la requete. Normalement tu dois mettre:

$articles = $this->Posts->find()
                            ->contain('terms')
                            ->all();

    debug($articles);