首页
/ Pheasant 项目技术文档

Pheasant 项目技术文档

2024-12-20 04:12:20作者:乔或婵

1. 安装指南

1.1 使用 Composer 安装

Pheasant 项目推荐使用 Composer 进行安装。Composer 是 PHP 的依赖管理工具,能够方便地管理项目的依赖关系。

安装步骤:

  1. 确保你已经安装了 Composer。如果尚未安装,可以通过以下命令进行安装:

    curl -sS https://getcomposer.org/installer | php
    mv composer.phar /usr/local/bin/composer
    
  2. 在你的项目根目录下创建或编辑 composer.json 文件,添加 Pheasant 作为依赖:

    {
      "require": {
        "lox/pheasant": "*"
      }
    }
    
  3. 运行以下命令安装 Pheasant:

    composer require lox/pheasant
    
  4. 安装完成后,Composer 会自动下载并安装 Pheasant 及其依赖包。

2. 项目的使用说明

2.1 配置数据库连接

在使用 Pheasant 之前,需要配置数据库连接。可以通过 Pheasant::setup 方法来设置数据库连接信息。

<?php
use \Pheasant;

// 配置数据库连接
Pheasant::setup('mysql://localhost:/mydatabase');

// 你可以添加额外选项:
// Pheasant::setup('mysql://root@localhost:/mydatabase?charset=utf8'); (utf8 是默认值)
// Pheasant::setup('mysql://root:password@localhost:/mydatabase?ssl_ca=foobar.pem');

2.2 定义域对象

Pheasant 使用域对象来映射数据库表。每个域对象都有一组属性和关系,这些属性和关系在 propertiesrelationships 方法中定义。

<?php
use \Pheasant;
use \Pheasant\Types;

class Post extends DomainObject
{
  public function properties()
  {
    return array(
      'postid'   => new Types\SequenceType(),
      'title'    => new Types\StringType(255, 'required'),
      'subtitle' => new Types\StringType(255),
      'status'   => new Types\EnumType(array('closed','open')),
      'authorid' => new Types\IntegerType(11),
      );
  }

  public function relationships()
  {
    return array(
      'Author' => Author::hasOne('authorid')
    );
  }
}

class Author extends DomainObject
{
  public function properties()
  {
    return array(
      'authorid' => new Types\SequenceType(),
      'fullname' => new Types\StringType(255, 'required')
    );
  }

  public function relationships()
  {
    return array(
      'Posts' => Post::hasOne('authorid')
    );
  }
}

2.3 保存对象

定义好域对象后,可以通过 save 方法将对象保存到数据库中。

<?php
// 创建一些对象
$author = new Author(array('fullname'=>'Lachlan'));
$post = new Post(array('title'=>'My Post', 'author'=>$author));

// 保存对象
$author->save();
$post->save();

echo $post->title; // 返回 'My Post'
echo $post->Author->fullname; // 返回 'Lachlan'

3. 项目API使用文档

3.1 魔法查找器

Pheasant 提供了多种查找器来定位对象。

<?php
// 所有用户
$users = User::all();

// 所有名为 frank 的用户
$users = User::find('firstname = ?', 'frank');

// 任何字段都可以用于查找器,这会转换为上面的查询
$users = User::findByFirstName('frank');

// 一个名为 frank 的用户
$users = User::one('firstname = ?', 'frank');

// 通过主键查找用户
$user = User::byId(1);

// 一个用户的所有评论(如果用户有多个评论)
$comments = User::byId(1)->Comment;

// 为了避免 n+1 查询问题,可以预加载关系:
$users = User::all()->includes(['Comment']); // $users[0]->Comment 不会触发数据库查询

// 预加载还支持预加载子关系
$users = User::all()->includes(['Comment' => [ 'Like', ]]);

3.2 集合作用域

作用域允许你定义常用的查询,这些查询可以通过方法调用在集合对象上引用。所有作用域方法都将返回一个 Pheasant::Collection 对象,允许进一步调用其他方法。

use \Pheasant;
Class User extends DomainObject
{
  public function scopes()
  {
    return array(
      'active' => function($collection){
        $collection->filter('last_login_date >= ?', strtotime('30 days ago'));
      },
    );
  }
}

// 作用域可以通过方法调用使用
User::all()->active()
//=> 返回所有活跃用户

3.3 事件

Pheasant 支持在创建、更新和删除操作之前和之后触发代码。

<?php
use \Pheasant;
use \Pheasant\Events;
use \Pheasant\Types;

class Post extends DomainObject
{
  public function properties()
  {
    return array(
      'postid'      => new Types\SequenceType(),
      'title'       => new Types\StringType(255),
      'timecreated' => new Types\IntegerType(11),
      ));
  }

  public function beforeCreate($post)
  {
    $d->timecreated = time();
  }
}

3.4 事务

Pheasant 支持全局事务和实例事务。

<?php
// 全局事务
\Pheasant::transaction(function() {
  $post = new Post(array('title'=>'First Post!'));
  $post->save();
});

// 实例事务
$post = new Post(array('title'=>'First Post!'));
$post->transaction(function($obj) {
  $obj->save();
});

4. 项目安装方式

Pheasant 项目可以通过 Composer 进行安装,具体步骤请参考 安装指南

登录后查看全文
热门项目推荐

项目优选

收起
openHiTLS-examplesopenHiTLS-examples
本仓将为广大高校开发者提供开源实践和创新开发平台,收集和展示openHiTLS示例代码及创新应用,欢迎大家投稿,让全世界看到您的精巧密码实现设计,也让更多人通过您的优秀成果,理解、喜爱上密码技术。
C
47
253
openHiTLSopenHiTLS
旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!
C
347
381
RuoYi-Vue3RuoYi-Vue3
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
871
516
ohos_react_nativeohos_react_native
React Native鸿蒙化仓库
C++
179
263
openGauss-serveropenGauss-server
openGauss kernel ~ openGauss is an open source relational database management system
C++
131
184
kernelkernel
deepin linux kernel
C
22
5
nop-entropynop-entropy
Nop Platform 2.0是基于可逆计算理论实现的采用面向语言编程范式的新一代低代码开发平台,包含基于全新原理从零开始研发的GraphQL引擎、ORM引擎、工作流引擎、报表引擎、规则引擎、批处理引引擎等完整设计。nop-entropy是它的后端部分,采用java语言实现,可选择集成Spring框架或者Quarkus框架。中小企业可以免费商用
Java
7
0
Cangjie-ExamplesCangjie-Examples
本仓将收集和展示高质量的仓颉示例代码,欢迎大家投稿,让全世界看到您的妙趣设计,也让更多人通过您的编码理解和喜爱仓颉语言。
Cangjie
335
1.09 K
harmony-utilsharmony-utils
harmony-utils 一款功能丰富且极易上手的HarmonyOS工具库,借助众多实用工具类,致力于助力开发者迅速构建鸿蒙应用。其封装的工具涵盖了APP、设备、屏幕、授权、通知、线程间通信、弹框、吐司、生物认证、用户首选项、拍照、相册、扫码、文件、日志,异常捕获、字符、字符串、数字、集合、日期、随机、base64、加密、解密、JSON等一系列的功能和操作,能够满足各种不同的开发需求。
ArkTS
31
0
CangjieCommunityCangjieCommunity
为仓颉编程语言开发者打造活跃、开放、高质量的社区环境
Markdown
1.08 K
0