DB query in yii

[font=“Microsoft Sans Serif”]Salve a tutti spero che almeno voi mi riusciate ad aiutare io ci sto impazzendo già da un po’ lo scenario è il seguente ho una tabella prova con id auto_increment quando vado in create vorrei mostrare l’idgià settato quindi prendendo il precedente incrementato di uno io avrei anche cominciato ma non so dove sbaglio…

	<?php echo $form->labelEx($model,'ID'); ?>


	<?php echo $form->textField($model,'ID',array(


                                                             'value'=>Yii::app()->test->


                                                             order('ID',DESC),Yii::app()->


                                                             prova->select(['ID'],  ['TOP1']),


                                                             'readonly'=>'readonly'

chi riesce ad aiutarmi?

grazie mille in anticipo

[/font]

Per prima cosa, ti trovi nella view, quindi non devi elaborare i dati. Secondo, … che cosa succede se due utenti accedono contemporaneamente allo stesso form? Entrambi hanno lo stesso id, e chi arriva dopo non potrà salvare.

Domanda: qual’è lo scopo di mostrare il futuro id di un record?

Altro suggerimento: crea un record vuoto di quella tabella e vai subito nell’update. Non è proprio il massimo, ma in quel modo avresti l’id senza dover reinvetare la ruota.

utente admin ce n’è uno solo quindi il problema non si pone

oltre tutto il codice io l’ho inserito nel file _form

p.s. parentesi che non c’entra con il problema di sopra come faccio a cambiare la lingua di defoult della mia allicazione da inglese ad italiano?

problema numero due io ho una taballa tbl_prova ed una tbl_est. tbl_prova è formata dai campi:ID,estID, value1, value2… tbl_est è fromata da: ID, value…

perchè nel view di prova non si veda l’est_ID ma, il contenuto del capo value di tbl_est qual’è la sintassi della query?

Ciao Fabio,

concordo con quanto scritto da sensorario.

Le view devono solo mostrare dati e non elaborarli.

anche _form fa parte delle view, tant’è che è contenuto nella dir /protected/view/…

Ti consiglio di studiarti molto bene:

[size="2"]Le Migliori Pratiche MVC[/size]

per le altre domande sarebbe meglio se per ognuna di esse,

cercassi prima le risposte tra i topic già aperti nel forum

e solo qualora non le trovassi aprissi un nuovo topic distinto.

Così da tenere una certa pulizia.

Faccio uno strappo alla regola e rispondo ad una delle tue domande:

devi aggiungere nella config:


'language'=>'it',//W l'Italia 

'sourceLanguage'=>'it_IT',//W l'italiano	



grazie per l’aiuto ma cmq non ho visto topic sulle query per questo l’ho aperto e cmq la mia domanda resta senza risposta qual’è la sintassi per SELECT(tbl_prova.ID,tbl_est.value,tbl_prova.value1,tbl_prova.value2)

Non ho ancora toccato le join (che mi pare sia ciò che serve a te)

sono andato su google e ho scritto:

yii join

ho trovato questo topic che dovrebbe fare al caso tuo:

http://www.yiichina.net/forum/index.php?/topic/26554-cdbcriteria-select-e-ambiguous-columns/

Fabio, il fatto è che con yii non devi scrivere sql. Per cui usando un framework le domande che ci aspettiamo sono "come mostro il valore di una chiave esterna al posto del suo id in un datagrid, oppure in un detailview?".

Esempio:

Immagine di avere due tabelle: una “utenti” e l’altra “regioni” così composte:

UTENTI

id

username

password

idregione

REGIONI

id

nome

A questo punto tu potresti aver creato model e crud di entrambe le tabelle. Supponiamo di trovarci in utenti/admin. Bene, ci troveremmo questo pezzo di codice davanti:




<?php

$this->widget('zii.widgets.grid.CGridView', array(

    'id' => 'utenti-grid',

    'dataProvider' => $model->search(),

    'filter' => $model,

    'columns' => array(

        'username',

        'password',

        'idregione',

        array(

            'class' => 'CButtonColumn',

        ),

    ),

));

?>



A questo punto tu dici, giustamente: "io non voglio vedere idregione, ma voglio proprio vedere il nome della regione".

Le cose da fare sono 2:

Punto primo, si va nel model utenti e dire che abbiamo bisogno di una relazione esterna:




UtentiController extends CActiveRecord {

    public function relations() {

        return array(

            'regione' => array(self::BELONGS_TO, 'Regioni', 'idregione'),

        );

    }

}



Punto secondo, andiamo a modificare il nostro CGridView in questo modo:




<?php

$this->widget('zii.widgets.grid.CGridView', array(

    'id' => 'utenti-grid',

    'dataProvider' => $model->search(),

    'filter' => $model,

    'columns' => array(

        'username',

        'password',

        'regione.nome',

        array(

            'class' => 'CButtonColumn',

        ),

    ),

));

?>



A fare le query ci pensa ActiveRecord. Ci pensa Yii.

Molto comodo.

Ma se si volesse visualizzare sia l’id regione che la descrizione della regione, come bisognerebbe fare?

Immagino una cosa del genere:


	

array(

            'label'=>'Regione e anche id ',

            'type'=>'raw',

			'value'=>$model->regione.nome . ' / ' . $model->id),



solo che così mi da errore

chiedo scusa io ho la sequente Join da mettere in codice yii

SELECT * FROM comunicap INNER JOIN comuni ON ccaComune = comID

ma non ho molto ben capito come

Dove hai scritto quel codice?

Che errore ti da?

Immagino tu debba usare la variabile $data e non $model.

Ci sono 2 modi: uno è quello che ti ho spiegato passo passo poco fa. L’altro è questo:

Yii::app()->db->createCommand(‘SELECT * FROM comunicap INNER JOIN comuni ON ccaComune = comID’);

chiedo scusa ieri non avevo visto le vostre risposte per questo ho risottoposto la domanda cmq le query in sql mi occorrono per abitudine lo so anch’io che non le devo usare barbariamente come su php base

uff sono riuscito a far vedere quel che mi interessea nel manage delle tabelle ma non capisco perchè nel list invece non mi mostra i campi sotto joinli zappa brutalmente prima mi mostrava i campi con gli id come valore ora li toglie dalla visualizzazione

Ci posti il codice?

ce l’ho fatta scusate mi sono incapponito e ne ho cavate le zampe. Tuttavia ho una domanda per voi in fase di creazione di un nuovo record di una tabella esempio

servizi

ID

tipoServizioID

nome

prezzo

tipiServizi

ID

nome

se io voglio vedere tutti i tipi servizi in una combobox in fase di creazione di un nuovo servizio cosa devo fare?

in pratica ne mancava un pezzo all’interno delle view

ho dovuto aggiungere del codice a quello che tu mi avevi dato perchè funzionasse nell list tuttavia non fa la join quando dal manage passo alla visione del singlo record:

/index.php?r=listinirighe/view&id=1

mi potreste aiutare a capire a che view si riferisce?

p.s. è il _serch?