2010-03-31 2 views
2

J'ai deux tables, le contenu et les images (et une table ContentImages pour la relation un à plusieurs, ce qui fait en fait 3 tables).Trier le champ dans la table des relations (un à plusieurs), comment insérer le numéro de tri?

Le code suivant enregistre la relation (dans l'action> updateContentFromRequest()):

$ids = $this->getRequestParameter('contentImages'); 
if(isset($ids)){ 
    $ImagesTable = Doctrine::getTable('Content')->getRelation('Images')->getTable(); 
    $associationName = Doctrine::getTable('Content')->getRelation('Images')->getAssociationTable()->getOption('name'); 
    $this->content->$associationName->delete(); 
    foreach ($ids as $id){ 
     $id = explode('/', $id); 
     $this->content->get('Images')->add($ImagesTable->find($id)); 
    }} 

J'ai changé le modèle d'inclure un champ de tri dans la table ContentImages:

content_id 
image_id 
sort (numeric) 

Le tri nombre est simplement cela, un nombre (0,1,2,3 etc)

$sort = $this->getRequestParameter('contentImagesSort'); 

Comment puis-je enregistrer e numéro de tri? Je ne souhaite pas ajouter un champ de tri à la table Image, car cela pourrait créer des difficultés lorsque les images sont réutilisées sur plusieurs éléments de contenu. Quand un élément de contenu est nouveau, je ne connais pas encore l'identifiant, donc je suis un peu perplexe ...

Répondre

0

Vous devez ajouter un à plusieurs associations sur votre table de jointure, comme:

ContentImages: 
    relations: 
    Image: 
     local: image_id 
     foreign: id 
    Content: 
     local: content_id 
     foreign: id 

En tant que tel, vous pourrez interroger directement la jointure table comme ceci:

$q = Doctrine_Query::create() 
    ->from('Content c') 
    ->leftJoin('c.ContentImages ci') 
    ->leftJoin('c.Images i') 
    ->execute(); 

Ensuite, vous peut accéder à l'aide ContentImages

$content->ContentImages->setSort('your sort'); 

Cela devrait faire l'affaire :)

+0

oh doux! Va essayer ça dès que ... un million! :) – Marc

0

Je fais les choses un peu différemment de ce que vous avez ci-dessus, donc pas tout à fait sûr que c'est ce que vous ' re demande, mais ne pouvez-vous pas enregistrer l'objet avec tout ce qui est nécessaire pour cela?

$association = // load up existing entry from ContentImages using whatever method 
$association->setSort($the_sort_I_want_to_add); 
$association->save(); 

Ou ... l'interrogeant

$association = // load up existing entry from ContentImages using whatever method 
$my_unknown_sort = $association->getSort(); 

espoir qui aide.

+0

Je pense que vous êtes à quelque chose, très intelligent! :) J'ai actuellement fait une solution de contournement en remplaçant la fonction (générée automatiquement) saveContent, je peux demander l'ID du contenu là-bas et faire une mise à jour sur les images jointes. – Marc

+0

hey Marc, gentil Q .. m'avait perplexe une fois .. j'ai aussi passé outre la méthode saveRelation et mis le sort – Prasad

1

Si vous avez généré des modèles que vous pouvez ajouter à votre méthode de configuration du paramètre orderBy:

$this->hasMany('PICTURE as PICTURES', array(
    'local' => 'BRAND_ID', 
    'foreign' => 'PICTURE_ID', 
    'refClass' => 'BRAND_PICTURE', 
    'orderBy' => 'your_field DESC' 
)); 

orderBy devrait faire l'affaire

+0

merci beaucoup pour celui-là! Je cherchais des âges. – virtualize

Questions connexes