Problemi con query inner join

Salve ragazzi sono nuovo di yii e mi sono subito imbattuto in un rompi capo.

Ho queste tabelle:


CREATE TABLE IF NOT EXISTS `clienti` (

  `id_cliente` int(11) NOT NULL AUTO_INCREMENT,

  `nome_categoria` varchar(100) NOT NULL,

  `nome_struttura` varchar(100) NOT NULL,

  `regione_sociale` text NOT NULL,

  `p_iva` text NOT NULL,

  `via` text NOT NULL,

  `citta` text NOT NULL,

  `provvincia` varchar(3) NOT NULL,

  `cap` varchar(5) NOT NULL,

  `telefono` text NOT NULL,

  `fax` text NOT NULL,

  `cellulare` text NOT NULL,

  `sito` text NOT NULL,

  `email` text NOT NULL,

  `note` text NOT NULL,

  `persona_riferimento` text NOT NULL,

  `codice_fiscale` char(16) NOT NULL,

  `img_principale` text NOT NULL,

  `img_1` text NOT NULL,

  `img_2` text NOT NULL,

  `img_3` text NOT NULL,

  `img_4` text NOT NULL,

  PRIMARY KEY (`id_cliente`)

) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;

e


CREATE TABLE IF NOT EXISTS `pubblicita` (

  `tipo_pubblicita` varchar(100) NOT NULL,

  `prezzo` float NOT NULL,

  `durata` int(11) NOT NULL,

  `num_max` int(11) NOT NULL,

  PRIMARY KEY (`tipo_pubblicita`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1;

e




CREATE TABLE IF NOT EXISTS `clienti_pubblicita` (

  `tipo_pubblicita` varchar(100) NOT NULL,

  `id_cliente` int(11) NOT NULL,

  PRIMARY KEY (`tipo_pubblicita`,`id_cliente`),

  KEY `id_cliente` (`id_cliente`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1;



come noterete tra clienti e pubblicita ce una relazione molti a molti che giustamente gii nella classe clienti ha tradotto in questa maniera:


'pubblicitas' => array(self::MANY_MANY, 'Pubblicita', 'clienti_pubblicita(id_cliente, tipo_pubblicita)'), 

mentre nella classe pubblicita


'clientis' => array(self::MANY_MANY, 'Clienti', 'clienti_pubblicita(tipo_pubblicita, id_cliente)'),

fin qui tutto bene… il problema sorge quando vado a creare questo metodo :




public function getClienti_pubblicita($tipo_pubblicita){

            $cliente= Clienti::model()->with(array(

                'pubblicitas'=>array(

                    

                    'select'=>'clienti.nome_struttura,clienti.img_principale',

                    'joinType'=>'INNER JOIN',

                    'condition'=>'clienti_pubblicita.tipo_pubblicita='+$tipo_pubblicita+'or clienti_pubblicita.tipo_pubblicita="all_inclusive"',

                ),

            ))->findAll();

            

            

       

            return new CActiveDataProvider($this, array(

			'cliente'=>$cliente,

		));

        }



l’errore è questo:




Active record "Pubblicita" is trying to select an invalid column "clienti.nome_struttura". Note, the column must exist in the table or be an expression with alias. 



Dove sbaglio?

Credo che la select dentro il with ti generi quell’errore.

Dovresti già avere disponibili le colonne clienti.* senza dichiarare:




...

'select'=>'clienti.nome_struttura,clienti.img_principale',

...



quindi prova a toglierlo e fai un debug delle query che vengono generate così da capire dov’è il problema!

Grazie mille era quello :rolleyes:

Ora sembra andar tutto bene ora ho una lacuna una volta eseguita la query in questa maniera:


$cliente= Clienti::model()->with(array(

                'pubblicitas'=>array(

                    'joinType'=>'INNER JOIN',

                    'condition'=>'clienti_pubblicita.tipo_pubblicita='+$tipo_pubblicita+'or clienti_pubblicita.tipo_pubblicita="all_inclusive"',

                ),

            ))->findAll();

       

        return new CActiveDataProvider($this, array(

			'criteria'=>$cliente,

		));

io nella view richiamo il metodo in questa maniera:




$cliente= Clienti::model()->getClienti_pubblicita('azienda_del_mese');



come faccio a farmi stampare i singoli valori senza utilizzare alcun zii.widget?

Non so cosa fa quel


getClienti_pubblicita

ma quello che cerchi credo sia $cliente->nomecampo

se vuoi tirare fuori pure le relazioni leggi qui così avrai un quadro completo!

Ho provato ma mi dice Property "CActiveDataProvider.img_principale" is not defined. cioè so che non esiste come propietà ma come faccio ad indicare che voglio il campo?

ok risolto era un problema di query. :rolleyes: