windwalker / model
该软件包已被弃用,不再维护。未建议替代软件包。
Windwalker Model软件包
2.1.9
2016-02-12 15:36 UTC
Requires
- php: >=5.3.10
- windwalker/registry: ~2.0
Requires (Dev)
- windwalker/test: ~2.0
README
Windwalker Model提供了一个抽象接口,用于构建您自己的模型逻辑。
通过Composer安装
将以下内容添加到您的composer.json
文件中的require块中。
{ "require": { "windwalker/model": "~2.0" } }
创建模型
通过扩展AbstractModel来创建自己的模型。
use Windwalker\Model\AbstractModel class MyModel extends AbstractModel { public function getItem() { return new stdClass; } } $model = new MyModel; $item = $model->getItem();
数据库模型
实现了DatabaseModelInterface,我们将能够获取和设置一个DB对象来访问数据库。
Windwalker Model不依赖于任何数据库包,您可以集成您最喜欢的数据源来获取数据。
use Windwalker\Model\AbstractModel use Windwalker\Model\DatabaseModelInterface; class MyModel extends AbstractModel implements DatabaseModelInterface { protected $db; public function __construct($db, Registry $state = null) { $this->db = $db; parent::__construct($state); } public function getDb() { return $this->db; } public function setDb($db) { $this->db = $db; } public function getList() { $this->db->setQuery('select * from users'); return $this->db->loadAll(); } }
模型状态
模型维护其自己的状态,我们可以更改此状态以获取不同的数据。
class MyModel extends AbstractModel implements DatabaseModelInterface { // ... public function getUsers() { $published = $this->state->get('where.published', 1); $ordering = $this->state->get('list.ordering', 'id'); $direction = $this->state->get('list.direction', 'ASC'); $sql = "SELECT * FROM users " . " WHERE published = " . $published . " ORDER BY " . $ordering . " " . $direction; try { return $this->db->setQuery($sql)->loadAll(); } catch (\Exception $e) { $this->state->set('error', $e->getMessage()); return false; } } } $model = new MyModel; $state = $model->getState(); // Let's change model state $state->set('where.published', 1); $state->set('list.ordering', 'birth'); $state->set('list.direction', 'DESC'); $users = $model->getUsers(); if (!$users) { $error = $state->get('error'); }
简单访问状态的方法
使用get()
和set()
// Same as getState()->get(); $model->get('where.author', 5); // Same as getState()->set(); $model->set('list.ordering', 'RAND()');
状态ArrayAccess
// Same as getState()->get(); $data = $model['list.ordering']; // Same as getState()->set(); $model['list.ordering'] = 'created_time';