项目地址:https://github.com/ayuayue/php-frame
制作一个PHP简易框架(十)– Session and Cookie
从现在开始进行对数据库的交互,在大部分框架中,都不会直接使用 sql
来直接进行数据库操作,但是也都保留了这种原始的方式,基本都是使用 ORM
的方式来进行操作,这可以增加项目的兼容性,即使更换了数据库版本或者使用了新的数据库,大部分的操作还是不变的。
这次使用 illuminate/database
这个 orm
,项目地址。这个开发包也是 laravel
框架使用的 orm
composer require "illuminate/database"
composer require "illuminate/events"
首先创建 orm
的服务提供者,然后注册到容器中,使用容器来管理此服务.
# app/Providers/DatabaseServiceProvider.php
<?php
namespace App\Providers;
class DatabaseServiceProvider extends AbstractServiceProvider
{
public $provides = [
'db'
];
public function register()
{
$container = $this->getContainer();
$container->add('db', $this->illuminate()); # 方便更换orm
}
private function illuminate()
{
$database = config('database.mysql');
$capsule = new Capsule();
$capsule->setEventDispatcher(new Dispatcher(new Container));
$capsule->addConnection($database);
$capsule->setAsGlobal();
$capsule->bootEloquent();
return $capsule;
}
}
在配置文件中加入该服务
# config/app.php
<?php
return [
'name' => env('APP_NAME','XXXX'),
'test' => 'app',
'debug' => env('APP_DEBUG',false),
'providers' => [
App\Providers\AppServiceProvider::class,
App\Providers\ViewServiceProvider::class,
App\Providers\DatabaseServiceProvider::class,
]
];
配置数据库信息到 env
文件中,并使用 config
来调用 env
中配置信息.
# config/database.php
<?php
return [
'database' => [
'mysql' => [
'driver' => env("DB_CONNECTION",'mysql'),
'host' => env("DB_HOST",'127.0.0.1'),
'database' => env('DB_DATABASE'),
'username' => env('DB_USERNAME'),
'password' => env('DB_PASSWORD'),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci'
]
]
];
env
文件中加入配置信息
# .env
APP_DEBUG=true
APP_CACHE=false
APP_NAME=caoayu
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=php-frame
DB_USERNAME=root
DB_PASSWORD=root
Model
首先创建数据库,并插入一条语句。语句如下
create table if not exists `users` ( `id` int unsigned auto_increment,`email` varchar(50) not null,`name` varchar(50) not null,`password` varchar(64) not null,primary key (`id`)) engine=innodb default charset=utf8;
使用 schema
创建表。
# app\Models\Tables.php
<?php
namespace App\Models;
class Tables
{
public function createUser()
{
app('db')::schema()->create('users',function ($table){
$table->increments('id');
$table->string('name', 50)->nullable($value = false);
$table->string('email',50)->nullable($value = false);
$table->string('password',50)->nullable($value = false);
});
}
}
生成
# app\Controllers\HomeController.php
use App\Models\Table;
$table = new Table;
$table->createUser();
# app\Controllers\HomeController.php
$user = app('db')::table('users')->insert([
'name' => 'zs',
'email' => '123',
'password' => '123456'
]);
dump(app('db')::table('users')->get());
# helpers.php
if (!function_exists('db')) {
function db($name)
{
return app('db')::table($name);
}
}
简化后的使用方式
db('users')->get();
db('users')->find(1);
db('users')->insert([
'key' => 'value',
]);