windwalker/model

该软件包已被弃用,不再维护。未建议替代软件包。

Windwalker Model软件包

安装: 34

依赖者: 0

建议者: 0

安全: 0

星级: 0

关注者: 3

分支: 0

开放问题: 0

类型:windwalker-package

2.1.9 2016-02-12 15:36 UTC

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';