fabik / database
1.1.0
2012-12-02 10:46 UTC
Requires
- nette/nette: dev-master
This package is not auto-updated.
Last update: 2022-02-01 12:20:41 UTC
README
这是一个基于 Nette\Database
的 Nette 框架数据库层。
安装
使用Composer(将 "fabik/database": "1.1.*"
添加到您的 composer.json
文件)或直接将 Database
下载到您的 libs 目录。
使用示例
-
创建数据库
CREATE TABLE `users` ( `id` int unsigned NOT NULL AUTO_INCREMENT, `username` varchar(255) NOT NULL, `password` char(40) NOT NULL, `email` varchar(255) NOT NULL, `firstname` varchar(255) NOT NULL, `surname` varchar(255) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY (`username`) ) ENGINE=InnoDB; CREATE TABLE `articles` ( `id` int unsigned NOT NULL AUTO_INCREMENT, `title` varchar(255) NOT NULL, `content` longtext NOT NULL, `author_id` int unsigned NOT NULL, PRIMARY KEY (`id`), KEY (`author_id`), FOREIGN KEY (`author_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB;
-
在引导程序中注册编译器扩展。
use Fabik\Database\DatabaseExtension; $configurator->onCompile[] = function($configurator, $compiler) { $compiler->addExtension('database', new DatabaseExtension); };
-
将以下部分添加到您的
config.neon
文件nette: database: default: dsn: '%database.driver%:host=%database.host%;dbname=%database.dbname%' user: %database.user% password: %database.password% database: rowFactory: classes: articles: Blog\Article users: Blog\User services: articles: Blog\Articles users: Blog\Users
-
为行(例如
Article
,User
)和表(例如Articles
,Users
)创建类<?php namespace Blog; use Fabik\Database\ActiveRow, Fabik\Database\Table; class Article extends ActiveRow { } class User extends ActiveRow { /** @return string */ public function getRealname() { return "$this->firstname $this->surname"; } /** @param string */ public function setRealname($realname) { list($this->firstname, $this->surname) = explode(' ', $realname); } } class Articles extends Table { protected $name = 'articles'; } class Users extends Table { protected $name = 'users'; }
-
现在您可以按照以下方式使用它
$articles = $container->articles; foreach ($articles->findAll() as $article) { echo "$article->title was written by $article->author->realname\n"; }