Qualche domanda sul Database

Ciao a tutti, leggendo la documentazione relativa ai database mi sono imbattuto in un po’ di dubbi :rolleyes:

[list=1]

[*]Come faccio a vedere la query a video? ho visto che c’e CLogRoute, che mi potrebbe aiutare, ma non ho capito come si “attiva”, sarebbe interessante anche l’opzione firebug

[*]che differenza c’e tra queste due query?




$query=queryTest::model()->find('id=:id', array(':id'=>3));

$query=queryTest::model()->find('id=3');

[*]per recuperare i risultati nella view devo sempre usare un array? per adesso ho fatto così:


$posts = queryTest::model() -> findAll();

		$data['posts'] = $posts;

		$this -> render('index', $data);



e in index


<?php foreach ($posts as $post) {

		

		echo "Nome utente => ".$post->nome."<br/>";

} 


?>

[*]come faccio a fare più query nella stessa pagina? una query che ad esempio mi conta i risultati, un’altra che mi da un’altro tipo di risultato, devo creare per ogni query un array ( nel mio caso chiamato data ) ?

[*]come si usano l’attributi? io ho fatto questa prova


$post = queryTest::model()->updateAll(array('nome'=>'alessio'));

		$post -> nome = 'nome Aggiornato';

		$post -> save();

ma ricevo "Attempt to assign property of non-object "

mentre se scrivo


$post = queryTest::model() -> findByPk(10);

		 $post -> nome = 'nome Aggiornato';

		 $post -> save();

funziona (vedo che li cerco per id)

ho anche due domande Extra DB

[*]cosè uno scenario ?

[*]come faccio a vedere quale models è collegato con quale controller?

[/list]

grazie ragazzi, spero di non stressarvi :P

Io invece ho una domanda per te: perché 7 domande in un solo thread? Rispondo solo all’ultima.

Secondo il pattern MVC, è il controller che sceglie i model e le view. Il "model" sono i dati. Quindi quando tu fai




	public function actionQualcheCosa()

	{

		$this->render('ilTemplate',array(

			'model'=>$333,

		));

	}



Secondo l’MVC hai

M = $model

V = ilTemplate.php

C = QualcosaController::actionQualcheCosa();

Provo a prenderti un controller che ho già sul mio pc, in particolare CorsiController::actionCreate(); In questo caso il model è Corso. Che trovi dentro al file /protected/models/Corso.php




	public function actionCreate()

	{

		$model=new Corso;

		if(isset($_POST['Corso']))

		{

			$model->attributes=$_POST['Corso'];

			if($model->save())

				$this->redirect(array('view','id'=>$model->id));

		}

		$this->render('create',array(

			'model'=>$model,

		));

	}

Grazie per la risposta, molto chiaro!

perche le prime 5 sono tutte inerenti allo stesso argomento, e non volevo aprire più post, proprio per non creare confusione! Ma probabilmente mi sono sbagliato :)

  1. varie possibilità:

in configurazione http://www.yiiframework.com/wiki/235/configuring-cweblogroute-for-db-profiling

inoltre hai anche l’opzione per firebug http://www.yiiframework.com/doc/api/1.1/CWebLogRoute/#showInFireBug-detail

oppure estensione http://www.yiiframework.com/extension/dbprofiler/

  1. la sintassi di yii ti permette di aggiungere funzioni di escape in automatico e controllo del tipo di parametro

  2. puoi anche creare una variabile del controller pubblica e poi richiamarla nella view con $this->variabilePubblica, a volte può essere utile nel caso in cui hai più view annidate e non vuoi passare l’array ad ogni chiamata (PS: secondo me è più chiaro se passi l’array creandolo direttamente nel render, cioè

$this -> render(‘index’, array(‘posts’ => $posts));

in questo modo riguardando il codice hai subito chiaro quali variabili vengono passate alla view)

  1. non ho capito la domanda :(

  2. http://www.yiiframework.com/doc/api/1.1/CActiveRecord/#updateAll-detail ritorna un integer perchè aggiorna tutti i record

la tua query deve essere questa

queryTest::model()->updateAll(array(‘nome’=>‘alessio’), ‘id=:id’, array(’:id’=>10));

  1. scenario serve per eseguire certi controlli/operazioni in alcune situazioni piuttosto che in altre: ad esempio in insert vuoi controllare che ci siano certi campi, mentre in update no, oppure vuoi aggiornare un certo campo ogni volta viene cancellato un record ecc.

Grazie Mille! sei stato molto Chiaro!!!