Tredun ohjelmistokehittäjien kurssimateriaaleja
Phinx on kätevä tietokannan luomis- ja päivitystyökalu (Phinx-dokumentaatio).
Asenna phinx composerin avulla (asenna composer, jos koneella ei ole sitä vielä)
composer require robmorgan/phinx
Tee tarvittavat kansiot: db/migrations ja db/seeds ja aja phinx:in init-komento (luo phinx.php - konfiguraatiotiedoston):
vendor/bin/phinx init
Konffaa tietokantayhteys
Käynnistä XAMPP ja luo uusi tietokanta (newsdemo_db). Tallenna tietokannan nimi phinx.php-tiedostoon kohtaan development:
'development' => [
'adapter' => 'mysql',
'host' => 'localhost',
'name' => 'newsdemo_db',
'user' => 'root',
'pass' => '',
'port' => '3306',
'charset' => 'utf8',
],
Tee projektin juureen .gitignore - tiedosto (vendor sisältää muiden tekemää koodia, ja phinx.php salasanoja, joten emme halua näitä github:iin)
phinx.php
vendor
Luo migrations-tiedosto ensimmäiselle taululle. Taulun nimi pitää kirjoittaa isolla alkukirjaimella, koska tästä syntyy luokka (class).
vendor/bin/phinx create Users
Määrittele taulun kentät change()-funktion sisällä, katso ohjeita phinx:in dokumentaatiosta.
Huom! phinx-tekee automaattisesti taululle id-nimisen autoincrement primary key:n, joten sitä ei tarvitse mainita. Käytä taulujen ja kenttien nimissä vain englantia ja pieniä kirjaimia sekä erikoismerkeistä vain _ viivaa).
```php
public function change()
{
// create the table
$table = $this->table('users');
$table->addColumn('created', 'datetime')
->addColumn('username', 'string')
->addColumn('password', 'string')
->addIndex(['username'], [
'unique' => true,
'name' => 'idx_username'])
->create();
}
```
Aja migrations tietokantaan
vendor/bin/phinx migrate -e development
Jos rakenne ei ollut haluttu voit vetää sen takaisin, korjata migrations-tiedostoa ja aja migrations uudelleen:
vendor/bin/phinx rollback -e development
Tee taululle tyhjä seeds-tiedosto
vendor/bin/phinx seed:create UsersSeeder
Lisää run() - funktioon tietokantataulun data
public function run()
{
$data = [
[
'id' => 1,
'created' => date('Y-m-d H:i:s'),
'username' => 'tester1',
'password' => password_hash('salasana1', PASSWORD_DEFAULT),
],
[
'id' => 2,
'created' => date('Y-m-d H:i:s'),
'username' => 'tester2',
'password' => password_hash('salasana2', PASSWORD_DEFAULT),
]
];
$posts = $this->table('users');
$posts->insert($data)
->saveData();
}
Aja seedit tietokantatauluihin
vendor/bin/phinx seed:run
Luo migrations-tiedosto toiselle taululle
vendor/bin/phinx create News
Määrittele taulun kentät change()-funktion sisällä. Huomaa, että relaatio muodostetaan addForeignKey-lauseella. Hyvä tapa on nimetä foregn key tyyliin <taulunnimi>_id.
public function change(): void
{
$table = $this->table('news');
$table->addColumn('title', 'string', ['limit' => 50])
->addColumn('content', 'string')
->addColumn('created', 'datetime')
->addColumn('expiry', 'datetime')
->addColumn('user_id', 'integer')
->addForeignKey('user_id', 'users', 'id', array('delete'=> 'CASCADE', 'update'=> 'NO_ACTION'))
->create();
}
Aja migrations tietokantaan
Tee taululle tyhjä seeds-tiedosto
vendor/bin/phinx seed:create NewsSeeder
Lisää run() - funktioon tietokantataulun data ja getDependensies()-funktioon taulut joihin viitataan
public function getDependencies()
{
return [
'UsersSeeder'
];
}
public function run()
{
$data = [
[
'id' => 1,
'title' => 'Talvi tuli',
'content' => 'Nyt on kyllä kylmä ilma!',
'created' => date('Y-m-d H:i:s'),
'expiry' => date('2021-12-31 00:00:00'),
'user_id' => 1,
],
[
'id' => 2,
'title' => 'Bussi on myöhässä',
'content' => 'Tästä ei hyvää seuraa!',
'created' => date('Y-m-d H:i:s'),
'expiry' => date('2021-12-31 00:00:00'),
'user_id' => 2,
]
];
$posts = $this->table('news');
$posts->insert($data)
->saveData();
}
Aja seedit tietokantaan
HUOM! Jos rollback ei toimi, voit poistaa taulut käsin tietokannasta ja ajaa migrations:it uudelleen.
Tee itsellesi ohje readme.md projektin juureen, niin muistat tarvittavat komennot
## Luo uusi migrations - tiedosto
vendor/bin/phinx create MyMigration
## Aja migrations tietokantaan
vendor/bin/phinx migrate -e development
## Peruuta muutokset
vendor/bin/phinx rollback -e development
## Tee uusi seeds - tiedosto
vendor/bin/phinx seed:create UserSeeder
## Aja seed:it tietokantaan
vendor/bin/phinx seed:run
Tallenna github:iin.