halpdesk / perform
此包最新版本(0.9.2)没有可用的许可信息。
0.9.2
2019-10-07 07:26 UTC
Requires
- php: ^7.2
- ext-json: *
- illuminate/support: ^6.0
Requires (Dev)
- halpdesk/helpers: ^0.9
- illuminate/validation: ^6.0
- phpunit/phpunit: ^7.0
This package is auto-updated.
Last update: 2024-09-07 19:09:59 UTC
README
Perform 是一个瑞士军刀式的仓库适配器。它为您的模型提供诸如 find、get、all 等功能。它为系统构建,这些系统具有大量的集成,数据来自不同的来源。此包提供了两个类,都需要实现以设置一个实体;一个 模型类 和一个 查询类。
该库是为 Eloquent 构建的。模型类模仿 Eloquent 模型,查询类模仿 Eloquent 构建器。
进行中
该库是正在进行中的工作。请参阅测试用例以获取实现。以下是一个简短的示例。
示例
以下是一个使用两个类(Person 类和 PersonQuery 类)的示例。在这个例子中,人员数据位于 person.json。
模型类
use Halpdesk\Perform\Abstracts\Model; use Halpdesk\Perform\Contracts\Model as ModelContract; class Person extends Model implements ModelContract { static public $query = PersonQuery::class; protected $fields = [ 'id', 'name', 'age', 'birthDate', ]; protected $casts = [ 'name' => 'string', 'age' => 'integer', 'birthDate' => 'datetime', ]; protected $dates = [ 'birthDate', ]; public $dateFormat = 'Y-m-d'; }
查询类
use Halpdesk\Perform\Abstracts\Query; use Halpdesk\Perform\Contracts\Query as QueryContract; class PersonQuery extends Query implements QueryContract { protected $model = Person::class; public function load() : void { /* * Use any method to set the data: read from file, make HTTP call, query database, etc. * In this example, we use a json file which contains all person data */ $data = json_file_to_array('./person.json'); $this->setData(collect($data)); } /* * create(), update() and delete() must be implemented * in this class in order to actually use those functions * * it will not be covered in this simple example (yet). */ }
数据源(person.json)
[
{ "id": 1, "name": "Adam", "age": 37, "birthDate": "1982-11-02" },
{ "id": 2, "name": "Billy", "age": 26, "birthDate": "1993-05-28" },
{ "id": 3, "name": "Charlie", "age": 31, "birthDate": "1988-10-05" },
{ "id": 4, "name": "David", "age": 33, "birthDate": "1986-03-14" }
{ "id": 5, "name": "Billy", "age": 22, "birthDate": "1997-02-09" }
]
方法示例
以下是一些使用模型类的示例。查询类主要是抽象的/隐藏的(就像 Laravel Eloquent 中的 Builder 类一样)。
// Constructs a Person with data associated with id:1 from person.json $person = Person::find(1); // Return a collection with Persons named Billy from person.json $persons = Person::where("name", "Billy")->get(); // Return a full collection with Persons constructed from person.json $all = Person::all(); // Throws a ModelNotFoundException (since id:7 does not exist in the person loaded) $person = Person::findOrFail(7); // Convert the Person class to an array $personArray = Person::findOrFail(2)->toArray(); // Create a new person -- this method calls the query class to attempt store the person in the data source (i.e. person.json) // But the create method must be implemented in the query class; if it is not, an `NotImplementedException` will be thrown $newPerson = Person::create([ "name" => "Ester", "age" => 55, "birthDate" => "1964-07-02" ]); // Same as above, but creates a temporary object which is not meant to be stored in the data source $tempNewPerson = Person::make([ "name" => "Ester", "age" => 55, "birthDate" => "1964-07-02" ]); // Other methods that needs to be implemented to work, or otherwise throw an `NotImplementedException` $person->save(); $person->update(); $person->delete();
测试
使用 PHPUnit 运行测试
