Bonjour j'ai réussi à faire une requète union , mais je me heurte à un autre souci ,c'est que le nom du virtual field disparaît quand je mets mes conditions .

Voici mon code de mon model

$db = $this->getDataSource();

            $subQuery = 'AdminActu.id IN ('. $actuchoix .')';

            $Query = $subQuery;
            $Query .= ' UNION ';

            $subQuery = $db->buildStatement(
                array(
                    'fields' => array('AdminActu.title','AdminActu.introtext','AdminActu.id','AdminActu.created_by'),
                    'table' => $db->fullTableName($this),
                    'alias' => 'AdminActu',
                    'limit' => null,
                    'offset' => null,
                    'joins' => array(),
                    'conditions' => array('AdminActu.id !='=>$actuchoix),
                    'order' => null,
                    'group' => null
                ),
                $this->AdminActu
            );

            $Query .= $subQuery ;

            $subQueryExpression = $db->expression($Query);

            $conditions] = $subQueryExpression;
            $actus=$this->find('all',array(
              'fields' => array('AdminActu.title','AdminActu.introtext','AdminActu.id','AdminActu.created_by'),
              'contain' => array(
                      'HomeActu.conditions'=>array(
                        'OR'=>array('HomeActu.date_end >= '.$date,
                              'HomeActu.date_end' => '0000-00-00'))),
              'conditions'=> $conditions,
              'alias'=>'AdminActu',
              'limit' =>$nbr_actus
              ));

            return $actus;

voici le résultat

(
    [0] => Array
        (
            [0] => Array
                (
                    [title] => ouah c'est le dernier
                   [introtext] => <p><img src="images/joomla_green.gif" border="0" alt="" />vbnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn</p>
                   [id] => 1
                   [created_by] => 42
               )

           [HomeActu] => Array
               (
               )

       )

si je retire le $conditions ma réponse mets le AdminActu sinon non :(

4 réponses


Perso, je te conseille de passer par

$this->Model->query("
      (SELECT AdminActu.title,AdminActu.introtext,AdminActu.id,AdminActu.created_by FROM adminactus WHERE id=1 LIMIT 1)
      UNION
      (SELECT mes champs FROM homactus LIMIT 1)");

Surtout si tu as déjà construit ta requête sql.

xam1311
Auteur

ok, déjà essayé

$actus=$this->query("SELECT Adminactu.title,AdminActu.introtext,AdminActu.id FROM msv5w_content AS AdminActu WHERE Adminactu.id IN (".$actuchoix.") UNION SELECT Adminactu.title,AdminActu.introtext,AdminActu.id AS AdminActu FROM msv5w_content AdminActu WHERE Adminactu.id NOT IN (".$actuchoix.") LIMIT ".$nbr_actus." ");

j'ai le même un array en chiffre ,pas exploitable si?
que je l'inclu dans le controller ou dans le modèle d'ailleurs.
et j'ai une sous condition par rapport à des dates ... :(

xam1311
Auteur

bon j'ai la nette impression que quand on change un peu la requête avec union on perd la possibilité du virtual field , si qqn a une info contraire , je suis preneur .
Le souci ce n'est pas l'appel car il suffit que je mette [0] mais la liaison hasOne et belongsTo qui ne fonctionne plus :/

xam1311
Auteur

re,si quelqu'un sait faire une différence pour remettre le bon nom du virtual field (afterfind ou un set qqe chose ?)
je suis toujours preneur