molovo / interrogate
此软件包最新版本(v0.2.3)没有可用的许可证信息。
v0.2.3
2017-03-30 11:34 UTC
Requires
- php: >=5.5
- jdorn/sql-formatter: 1.2.*
- molovo/object: ^1.0
- molovo/str: ^0.1
- vlucas/phpdotenv: 2.1.*
Requires (Dev)
- filp/whoops: 1.*
This package is auto-updated.
Last update: 2024-08-29 04:46:05 UTC
README
Interrogate 是一个轻量级、独立的面向对象关系映射(ORM)工具,适用于 PHP 5.5+。
安装
composer require molovo/interrogate
将包含的 .env.example
文件从 vendor/molovo/interrogate
复制到您的 Web 服务器上的 DOCUMENT_ROOT
,并将其重命名为 .env
。然后,更新新的 .env
文件以包含您的数据库连接信息。
入门指南
查询是通过链式方法构建的,尽可能遵循 SQL 语法。查询返回一个包含多个 Model
对象的 Collection
对象。
use Molovo\Interrogate\Database; use Molovo\Interrogate\Query; Database::bootstrap(); $query = Query::table('users') ->select('username', 'email') ->where('name', 'Joe Bloggs'); // @var $users Molovo\Interrogate\Collection $users = $query->fetch(); // @var $user Molovo\Interrogate\Model foreach ($users as $user) { echo $user->username; echo $user->email; }
使用连接
可以通过将另一个 Query
对象传递给 join()
方法来构建包含连接的查询。连接查询返回的模型存储在模型的属性中,使用表名(或别名,如果已定义)。连接查询可以使用点符号比较父查询中的字段,直接使用表名(或别名),或如下使用关键字 parent
。
use Molovo\Interrogate\Query; $query = Query::table('users_table', 'users') ->select('name') ->join(Query::table('addresses_table', 'addresses') ->select('town') ->on('user_id', 'parent.id')); $users = $query->fetch(); foreach ($users as $user) { // @var $addresses Molovo\Interrogate\Collection $addresses = $user->addresses; foreach ($addresses as $address) { echo $address->town; } }
使用模型
可以为表创建模型类,以允许快速查询创建和在每张表的基础上添加功能。以下是一个模型的最简单形式
namespace Models; use Molovo\Interrogate\Model; class User extends Model {}
默认情况下,表名是类名的复数蛇形命名。例如,模型 UserDetail
指的是表 user_details
。要使用不同的表名,请定义静态属性 $tableName
。
class User extends Model { protected static $tableName = 'the_users_table'; }
模型使用魔术方法允许静态访问 Query 类中的方法。
$user = User::where('name', 'Joe Bloggs'); // is equivalent to $user = Query::table('users')->where('name', 'Joe Bloggs');
您还可以静态调用 Collection
类上的方法。
$names = User::toList('name'); // is equivalent to $collection = Query::table('users')->fetch(); $names = $collection->toList('name');