Vesthelm Engine

2.1.4 Руководство пользователя

Класс Модель

Класс Модель предоставляет функции для работы с информацией в базе данных.

Создание модели

Допустим, вы хотите создать приложение доски объявлений. У вас может быть класс модели, который содержит функции для вставки, обновления и извлечения данных. Вот пример класса модели:

defined('V_IN_FRONTEND') or die('Powered by <a href="http://www.vesthelm.com/">Vesthelm EE</a>');

class Bulletin_Board_Bulletin extends Vesthelm_Model {

    protected $_table = 'bulletin_board_bulletins'; //таблица модели, которая будет использоваться при добавлении или изменении данных.

    public function getBulletins() {
        $this->select(array('b.title', 'b.description'))
                ->from(array('b' => $this->_table))
                ->where(array(array('status' => 'active')))
                ->limit(0, 100);

         return $this->all();
    }

    public function get() {
        $this->select(array('b.title', 'b.description'))
                ->from(array('b' => $this->_table))
                ->where(array('id' => 10));

         return $this->row();
    }

    public function add() {
        $data['title'] = 'Bulletin title';
        $data['description'] = 'Bulletin description';

        $additional['date'] = 'NOW()';

        return $this->insert('', $data, $additional);
    }

    public function edit() {
        $data['title'] = 'Bulletin title';
        $data['description'] = 'Bulletin description';

        return $this->update('', $data, array('id' => 10));
    }

    public function delete() {
        $id = 10;
        $id = is_array($id) ? $id : array($id);

        return parent::delete($this->_table, array(array('id', 'IN', $id));
    }

}

Анатомия модели

Классы моделей расположены в каталогах:

//Модели сайта
example.com/frontend/models
example.com/acp/models

//Модели приложений
example.com/applications/{имя_приложения}/frontend/models
example.com/applications/{имя_приложения}/acp/models

//Модели дополнений
example.com/addons/{имя_дополнения}/frontend/models
example.com/addons/{имя_дополнения}/acp/models

//Иногда модели можно найти здесь (старый способ):
example.com/addons/{имя_дополнения}/frontend/classes
example.com/addons/{имя_дополнения}/acp/classes

Базовый прототип для модели:

class Enhancement_Name_Model_Name extends Vesthelm_Model {
    function __construct(){
        parent::__construct();
    }
}

Enhancement_Name - имя приложения. Имена приложений должны начинаться с заглавной буквы после символа _ подчеркивания.

Model_Name - имя модели. Имена моделей должны начинаться с заглавной буквы после символа _ подчеркивания. Убедитесь, что ваш класс наследует базовый класс модели (Vesthelm_Model).

Имя файла будет таким же, как имя класса (Model_Name). Например, если ваш класс:

class Bulletin_Board_Bulletin extends Vesthelm_Model {
    function __construct(){
        parent::__construct();
    }
}

Ваш файл будет:

example.com/applications/bulletin-board/acp/models/Bulletin.php

//или
example.com/applications/bulletin-board/acp/models/bulletin/Bulletin.php

Вызов модели

Вызов модели сайта:

$Addon_Model = $this->Addon;

Вызов модели приложения доски объявлений:

$Bulletin_Model = $this->bulletin_board->Bulletin;

//идентичны
$Bulletin_Model->add();
$this->bulletin_board->Bulletin->add();

bulletin_board - имя приложения и Bulletin - имя модели.

Наследование от базовых моделей

Базовая модель:

class Vesthelm_Category extends Vesthelm_Model {
    function __construct() {
        parent::__construct();
    }
}

Наследование:

class Bulletin_Board_Category extends Vesthelm_Category {
    public function your_func() {}
}