corso yii #04 - il database
DESCRIPTION
TRANSCRIPT
![Page 1: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/1.jpg)
1
Lavorare con i database
![Page 2: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/2.jpg)
2
Question time
![Page 3: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/3.jpg)
3
Introduzione
![Page 4: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/4.jpg)
4
Yii offre un potente supporto per la
programmazione con database
![Page 5: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/5.jpg)
5
Il Data Access Object di Yii, è costruisto
sull’estensione PHP Data Object (PDO) di
PHP.
![Page 6: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/6.jpg)
6
Possiamo accedere, con DAO, a tutti i DBMS che supportano PDO.
![Page 7: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/7.jpg)
7
Mai più SQL...
più o meno
![Page 8: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/8.jpg)
8
Query Builder&&
Active Record
![Page 9: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/9.jpg)
9
Query Builder
![Page 10: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/10.jpg)
10
Yii Query Builder:“queries object-
oriented”
![Page 11: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/11.jpg)
11
SQL injection
![Page 12: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/12.jpg)
12
Active Record
![Page 13: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/13.jpg)
13
Approccio Object-Relational Mapping
(ORM)
![Page 14: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/14.jpg)
14
Classe PHP==
Tabella
![Page 15: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/15.jpg)
15
Oggetto PHP==
Record della Tabella
![Page 16: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/16.jpg)
16
Question time
![Page 17: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/17.jpg)
17
Database Access Object
![Page 18: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/18.jpg)
18
Introduzione al DAO
![Page 19: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/19.jpg)
19
API per accedere ai dati memorizzati nel DBMS
![Page 20: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/20.jpg)
20
Basato su PDO, un’estensione che
fornisce un accesso unico a diversi DBMS
![Page 21: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/21.jpg)
21
MySQL
![Page 22: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/22.jpg)
22
PostgreSQL
![Page 23: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/23.jpg)
23
SQLlite
![Page 24: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/24.jpg)
24
Le classi del DAO
•CDbConnection: connessione al database
•CDbCommands: query SQL
•CDbDataReader: record di un result set
•CDbTransaction: transazione
![Page 25: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/25.jpg)
25
Connessione al database
![Page 26: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/26.jpg)
26
$conn = new CDbConnection($dsn, // Data Source Name$username,$password
);
$conn->active = true;
$conn->active = false;
![Page 27: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/27.jpg)
27
DSN (Data Source Name)
![Page 28: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/28.jpg)
28
“nome driver PDO;sintassi della connessione”
![Page 29: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/29.jpg)
29
MySQL: mysql:host=localhost;dbname=testd
b
![Page 30: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/30.jpg)
30
Oracle: oci:dbname=//localhost:1521/testdb
![Page 31: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/31.jpg)
31
array( 'components'=>array( 'mysql'=>array( 'class'=>'CDbConnection', 'connectionString'=>'mysql:host=localhost;dbname=testdb', 'username'=>'root', 'password'=>'root' ), ),)
![Page 32: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/32.jpg)
32
array( 'components'=>array( 'oci'=>array( 'class'=>'CDbConnection', 'connectionString'=>'oci:dbname=//localhost:1521/testdb', 'username'=>'root', 'password'=>'root' ), ),)
![Page 33: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/33.jpg)
33
Yii::app()->mysql
![Page 34: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/34.jpg)
34
Yii::app()->oci
![Page 35: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/35.jpg)
35
Eseguire query SQL
![Page 36: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/36.jpg)
36
Le query si eseguono usando:
CDbCommand::createCom
mand();
![Page 37: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/37.jpg)
37
$connessione = Yii::app()->mysql;$connessione = new
CDbConnection($dsn, $u, $p);
$sql = ‘select * from utenti’;$comando = $connessione-
>createcommand($sql);
![Page 38: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/38.jpg)
38
execute()
INSERT, UPDATE, DELETE
![Page 39: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/39.jpg)
39
query() // CDbDataReader
SELECT
![Page 40: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/40.jpg)
40
$rows = $command->queryAll();
restituisce tutti i records
![Page 41: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/41.jpg)
41
$rows = $command->queryRow();
restituisce il primo record
![Page 42: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/42.jpg)
42
Fetching dei risultati
![Page 43: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/43.jpg)
43
query() e queryXXX()
restituiscono un CDbDataReader
![Page 44: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/44.jpg)
44
$dataReader = $command->query();foreach($dataReader as $read) { // ...}
![Page 45: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/45.jpg)
45
query() // restituisce tutti i dati
queryXXX() // restituiscono il primo record
![Page 46: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/46.jpg)
46
Transazioni
![Page 47: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/47.jpg)
47
CDbTransaction
![Page 48: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/48.jpg)
48
$t = $conn->beginTransaction();
try {$conn->createcommand($sql)-
>execute();$conn->createcommand($sql)-
>execute();$conn->createcommand($sql)-
>execute();$t->commit();
} catch(Exception $e) {$t->rollback();
}
![Page 49: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/49.jpg)
49
Bind dei parametri
![Page 50: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/50.jpg)
50
SQL injection
![Page 51: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/51.jpg)
51
$sql = ‘insert into utenti (username, email) values (:username, :email)’;
$command = $connessione->createCommand($sql);$command->bindParam(‘:username’, $username, PDO::PARAM_STR);$command->bindParam(‘:email’, $email, PDO::PARAM_STR);
$command->execute();
![Page 52: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/52.jpg)
52
$sql = ‘select username, email from utenti’;
$dataReader = $connessione->createCommand($sql)->query();
$dataReader->bindColumn(1, $username);$dataReader->bindColumn(2, $email);
while ($dataReader->read() !== false) {echo $username;echo $email;
}
![Page 53: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/53.jpg)
53
Prefisso delle tabelle
![Page 54: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/54.jpg)
54
Se si usano più applicazioni con lo stesso database
![Page 55: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/55.jpg)
55
ogni applicazione può avere un proprio
prefisso
![Page 56: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/56.jpg)
56
yii_ potrebbe essere il prefisso della nostra
app
![Page 57: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/57.jpg)
57
phpbb_ il prefisso del nostro forum
![Page 58: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/58.jpg)
58
wp_ il prefisso del blog wordpress
![Page 59: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/59.jpg)
59
e così via ...
![Page 60: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/60.jpg)
60
CDbConnection::tablePrefix
contiene il prefisso della tabella
![Page 61: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/61.jpg)
61
Nelle query sql possiamo usare {{table_name}}
![Page 62: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/62.jpg)
62
yii_user ?select * from yii_user
select * from {{user}}
![Page 63: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/63.jpg)
63
Question time
![Page 64: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/64.jpg)
64
Query Builder
![Page 65: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/65.jpg)
65
Introduzione al Query Builder
![Page 66: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/66.jpg)
66
Modo object-oriented di scrivere query SQL
![Page 67: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/67.jpg)
67
Assembla parti di SQL per renderle eseguibili
nel DAO di Yii
![Page 68: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/68.jpg)
68
$user = Yii::app()->db->createCommand()
->select('username, email')->from('utenti u')->join('profili p',
'u.id=p.user_id')->where('id=:id',
array(':id'=>$id))->queryRow();
![Page 69: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/69.jpg)
69
Con il QB è possibile comporre query
complesse
![Page 70: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/70.jpg)
70
Gestisce automaticamente il quoting dei nomi di
tabella e dei campi per prevenire confrlitti
![Page 71: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/71.jpg)
71
SQL injection
![Page 72: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/72.jpg)
72
Ha un buon livello di astrazione che semplifica la
migrazione tra i vari DBMS
![Page 73: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/73.jpg)
73
Preparazione del QB
![Page 74: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/74.jpg)
74
$command = Yii::app()->mysql->createCommand();
![Page 75: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/75.jpg)
75
select()selectDistinct()
![Page 76: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/76.jpg)
76
from()
![Page 77: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/77.jpg)
77
where()andWhere()orWhere()
![Page 78: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/78.jpg)
78
join()leftJoin()
rightJoin()crossJoin()
naturalJoin()
![Page 79: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/79.jpg)
79
group()having()order()limit()offset()union()
![Page 80: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/80.jpg)
80
$user = Yii::app()->db->createCommand()
->union(‘select * from {{tabella}}’)
->queryRow();
![Page 81: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/81.jpg)
81
$users = Yii::app()->db->createCommand() ->select('*') ->from('tbl_user') ->queryAll();
![Page 82: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/82.jpg)
82
$sql = Yii::app()->db->createCommand() ->select('*') ->from('tbl_user') ->text;
![Page 83: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/83.jpg)
83
$command = Yii::app()->db->createCommand();$users = $command->select('*')->from('tbl_users')->queryAll();
$command->reset();$posts = $command->select('*')->from('tbl_posts')->queryAll();
![Page 84: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/84.jpg)
84
Manipolare i dati
![Page 85: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/85.jpg)
85
insert()update()delete()
![Page 87: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/87.jpg)
87
$command->update('utenti', array( 'nome'=>'Fabio',), 'id=:id', array(':id'=>1));
![Page 88: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/88.jpg)
88
$command->delete('utenti', 'id=:id', array(':id'=>1));
![Page 89: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/89.jpg)
89
Alterare lo schema del database
![Page 90: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/90.jpg)
90
createTable()renameTable()
dropTable()truncateTable()
![Page 91: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/91.jpg)
91
addColumn()renameColumn()
alterColumn()dropColumn()
![Page 92: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/92.jpg)
92
createIndex()dropIndex()
![Page 93: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/93.jpg)
93
Abstract Data Types•pk
•text
•string
•integer
•float
•decimal
•datetime
•timestamp
•time
•date
•binary
•boolean
•money
![Page 94: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/94.jpg)
94
Question time
![Page 95: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/95.jpg)
95
Active Record
![Page 96: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/96.jpg)
96
Transazioni con Active Record
![Page 97: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/97.jpg)
97
$model=Post::model();$transaction=$model->dbConnection->beginTransaction();try{ $post=$model->findByPk(10); $post->title='new post title'; $post->save(); $transaction->commit();}catch(Exception $e){ $transaction->rollback();}
![Page 98: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/98.jpg)
98
Scopes
![Page 99: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/99.jpg)
99
$post = Post::model()->findAll(array( 'order'=>'create_time DESC',
'limit'=>5, ));
![Page 100: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/100.jpg)
100
class Post extends CActiveRecord{ public function scopes() { return array( 'recenti'=>array( 'order'=>'create_time DESC', 'limit'=>5, ), 'ultimo'=>array( 'order'=>'create_time DESC', 'limit'=>1, ), ); }}
$postRecenti = Post::model()->recenti()->findAll();
$postRecenti = Post::model()->ultimo()->findAll();
![Page 101: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/101.jpg)
101
public static funtion getSomeValues ($campo = 33) {
return Post::model()->findAll(array( ‘condition’ => ‘campo=:campo’, ‘params’ => array( ‘:campo’ => $campo ) ));}
![Page 102: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/102.jpg)
102
class Post extends CActiveRecord{ public function recenti($limit = 3) { $this->getDbCriteria()->mergeWidth(array( ‘order’ => ‘create_time DESC’, ‘limit’ => $limit )); return $this; }}
$postRecenti = Post::model()->recenti(4)->findAll();
![Page 103: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/103.jpg)
103
Relazioni
![Page 104: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/104.jpg)
104
Per non usare il lazy loading
$post = Post::model()->with(‘author’, ‘tags’)->findAll();
![Page 105: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/105.jpg)
105
$posts=Post::model()-
>with('comments:recently:approved')->findAll();
$posts=Post::model()->findAll(array( 'with'=>array( 'comments'=>array( 'scopes'=>array('recently','approved') ), ),));
![Page 106: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/106.jpg)
106
class User extends CActiveRecord{ public function relations() { return array( 'posts'=>array(self::HAS_MANY, 'Post', 'author_id', 'with'=>array( 'comments'=>array( 'scopes'=>'approved' ), ), ), ); }}
![Page 107: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/107.jpg)
107
Question time
![Page 108: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/108.jpg)
108
Database Migration
![Page 109: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/109.jpg)
109
Marco aggiunge una tabella ed il codice ed i modelli che ne fanno
uso.
![Page 110: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/110.jpg)
110
Marco ha aggiunto la tabella con una
migrazione e committa sul repository
![Page 111: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/111.jpg)
111
Giuseppe scarica il codice sorgente e
langia le migrations
![Page 112: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/112.jpg)
112
Giuseppe, senza sapere che cosa ha fatto
Marco, ha il database aggiornato.
![Page 113: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/113.jpg)
113
Lanciando le migrazioni in produzione,
possiamo aggiornare lo schema del DB
![Page 114: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/114.jpg)
114
Senza fare interventi MANUALMENTE
![Page 115: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/115.jpg)
115
class m999999_999999_creo_una_tabella extends CDbMigration{ public function up() { $this->createTable('una_tabella', array( 'id' => 'pk', 'stringa' => 'string NOT NULL', 'testo' => 'text', )); } public function down() { $this->dropTable('una_tabella'); }}
![Page 116: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/116.jpg)
116
Question time
![Page 117: Corso yii #04 - il database](https://reader038.vdocuments.site/reader038/viewer/2022103014/5482369db4af9fcf788b4570/html5/thumbnails/117.jpg)
117
Fine