Prado - vytvoření objektů pro práci s databází

od aichi E-mail

Po seznámení s Pradem a seznámení s tvorbou šablon je načase si ukázat jak jednoduše z databázové struktury vygenerovat ActiveRecord objekty pro práci s daty.

...

V prvním díle jsme si vygenerovali aplikaci do adresáře cms. Je načase tuto kostru aplikace obohatit přístupem do databáze. Vytvořme si jednoduchou databázi s tabulkou pro články a autory v MySQL databázi:


CREATE DATABASE `prado_cms` DEFAULT CHARACTER SET utf8;

-- tabulka clanku
CREATE TABLE `prado_cms`.`article` (
`articleId` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
`name` VARCHAR(255) NOT NULL,
`body` TEXT NOT NULL,
`authorId` INTEGER UNSIGNED NOT NULL,
`displayDate` DATETIME NOT NULL,
`show` BOOLEAN NOT NULL DEFAULT 1,
PRIMARY KEY (`articleId`),
INDEX `author`(`authorId`)
)
ENGINE = InnoDB;

-- tabulka autoru
CREATE TABLE `prado_cms`.`author` (
`authorId` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
`name` VARCHAR(45) NOT NULL,
`email` VARCHAR(100) NOT NULL,
PRIMARY KEY (`authorId`)
)
ENGINE = InnoDB;

--vazba mezi clankem a autorem
ALTER TABLE `prado_cms`.`article` ADD CONSTRAINT `FK_article_1` FOREIGN KEY `FK_article_1` (`authorId`)
REFERENCES `author` (`authorId`)
ON DELETE CASCADE
ON UPDATE CASCADE;

Tabulky máme, nyní bychom k nim rádi objekty, které s daty v těchto tabulkách umí pracovat. Pokud Prado aplikaci dáme v konfiguraci přístup k databázi, dokáže nám je vygenerovat automaticky. Proto vytvoříme konfigurační soubor application.xml, který se bude nacházet v adresáři protected Jak vypadá obsah souboru je popsáno v dokumentaci v sekci Application Configuration. My si odneseme poznatek, že konfigurační soubor je XML, ve kterém se definují moduly, služby a parametry aplikace. Náš soubor bude vypadat takto:


<?xml version="1.0" encoding="utf-8"?>
<application id="prado_cms" mode="Debug">
<paths>
<using namespace="System.Data.*" />
<using namespace="System.Data.ActiveRecord.*" />
</paths>

<modules>
<module class="TDataSourceConfig" id="local">
<database ConnectionString="mysql:dbname=prado_cms;host=127.0.0.1;port=3306" Username="root" Password="" />
</module>

<module class="TActiveRecordConfig" EnableCache="false" ConnectionID="local" />
</modules>
</application>

Na druhém řádku je definován uzel application. Do tohoto uzlu definujeme poduzel paths, ve kterém říkáme Pradu, jaké moduly má automaticky načíst při startu, bez toho abychom je museli na stránce načítat ručně. V druhém poduzlu modules definujeme použité moduly. Prvním modulem je konfigurace připojení k databázi. Modul má své id, kterým se na něj můžeme dále v kódu odkazovat. Druhým modulem je konfigurace ActiveRecord.

Nyní můžeme přistoupit k vygenerování tříd. V adresáři protected si vytvoříme podadresář record, kam budeme generovat soubory s jednotlivými třídami. Pak můžeme využít příkazu spouštěného z příkazové řádky:


path/to/php path/to/prado-cli.php generate article Application.record.article
path/to/php path/to/prado-cli.php generate author Application.record.author

Pokud vše proběhne dobře, najdeme v adresáři record dva soubory. Příkazem se generuje soubor pro danou třídu do zadaného souboru (Application.record.article). Proč je cesta tak divná? Je to jednoduché. Application značí cestu do adresáře protected a od něj jsou tečkama značeny podadresáře a poslední název je název souboru.

Soubory vypadají docela prázdně:


<?php
/**
* Auto generated by prado-cli.php on 2009-03-01 10:27:17.
*/
class article extends TActiveRecord
{
const TABLE='article';

public $articleId;
public $name;
public $body;
public $authorId;
public $displayDate;
public $show;

public static function finder($className=__CLASS__)
{
return parent::finder($className);
}
}
?>


<?php
/**
* Auto generated by prado-cli.php on 2009-03-01 10:23:28.
*/
class author extends TActiveRecord
{
const TABLE='author';

public $authorId;
public $name;
public $email;

public static function finder($className=__CLASS__)
{
return parent::finder($className);
}
}
?>

nicméně opak je pravdou. Oba dědí ze třídy TActiveRecord, která jim propůjčuje plnou funkcionalitu. Tu si můžeme vyzkoušet přímo z příkazové řádky, kdy spuštěním příkazu


path/to/php path/to/prado-cli.php shell

z adresáře budoucího webu se dostaneme do PHP konzoly ale s již spuštěnou Prado aplikací. Nyní stačí napsat do konzoly tyto PHP příkazy pro načtení systémového balíčku ActiveRecordu a dále naincludovat naší PHP třídu:


Prado::using('System.Data.ActiveRecord.*');
include 'protected\record\author.php';

Nyní vytvoříme instanci autora a uložíme ji do databáze:


$author = new author();
$author->name = 'aichi';
$author->email = 'test@example.com';
$author->save();

Nakonec bych chtěl ještě poukázat na zděděnou statickou metodu finder. Pomocí ní je možné provést vyhledávání nad daty v databázi a vrátit výsledky v objektu dané třídy. Následující příkaz vrátí všechny autory:


Author::finder()->findAll();

Příště si povíme o vytváření závislostí mezi třídami a jejich načítání do objektů a také si uděláme jednoduchý výpis článků a jejich administraci.

Adresy zpětných odkazů pro tento příspěvek:

Trackback URL (right click and copy shortcut/link location)

1 komentář

Komentář od: crewmanek [Návštěvník]
crewmanekSuper návod:) díky btw pěkný blog
08. 03. 09 @ 18:14

Napsat komentář


Vaše e-mailová adresa nebude zveřejněna.

Adresa Vašich WWW stránek bude zveřejněna.
(Konce řádku budou převedeny na <br />)
(Jméno, email a webová stránka)
(Dovolí ostatním uživatelům kontaktovat Vás prostřednictvím formuláře pro zprávy (Vaše e-mailová adresa NEBUDE zveřejněna.))