вызов модели

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
nepster
Сообщения: 838
Зарегистрирован: 2013.01.02, 03:35

вызов модели

Сообщение nepster »

подскажите пожалуйста как правильно вызывать модель, к примеру из контролера или сторонней библиотеке ?
Аватара пользователя
Myroslaw
Сообщения: 30
Зарегистрирован: 2012.07.09, 14:01
Откуда: Тернополь
Контактная информация:

Re: вызов модели

Сообщение Myroslaw »

ModelName::model()->findByAttribute(); ?
nepster
Сообщения: 838
Зарегистрирован: 2013.01.02, 03:35

Re: вызов модели

Сообщение nepster »

всмысле вот есть например контролер:

Код: Выделить всё

    public function actionTest()
    {

    } 

и метод в модели (test_model.php) например:

Код: Выделить всё

    public function test()
    {
            // вернет какие-то данные из базы
    } 

вот например как можно инициализировать модель в контролере (к примеру) и обратиться к методу тест ?
Аватара пользователя
anton44eg
Сообщения: 2716
Зарегистрирован: 2012.01.25, 13:37
Откуда: Киев

Re: вызов модели

Сообщение anton44eg »

Все зависит от задачи. Грубо говоря - экземпляр модели это 1 строка в таблице БД.
nepster
Сообщения: 838
Зарегистрирован: 2013.01.02, 03:35

Re: вызов модели

Сообщение nepster »

ну например есть задача достать материал из базы под номером 17

Код: Выделить всё

// вот есть контроллер к примеру:
function actionContent($id = false)
{
//тут я хочу вызвать модель и передать в нее $id
//что бы получить запись в базе под номером 17 

// по CI я знаю что можно вызвать:
// $this->model->modelname($id);

// а вот как в Yii вообще вызвать модель?
} 
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: вызов модели

Сообщение ElisDN »

nepster писал(а):ну например есть задача достать материал из базы под номером 17

Код: Выделить всё

function actionContent($id)
{
    $model = Test::model()->findByPk($id);
} 
nepster
Сообщения: 838
Зарегистрирован: 2013.01.02, 03:35

Re: вызов модели

Сообщение nepster »

это получается по сути любой класс из любого вызывается статическими методами.
Тоесть не важно взываю ли я модель из контролера или из библиотеки, все через статические методы!?

а то не привычно слазить с CI на Yii
Dismal
Сообщения: 247
Зарегистрирован: 2011.10.16, 13:25

Re: вызов модели

Сообщение Dismal »

Статическая функция Model() используется для получения статического экземпляра ActiveRecord, что позволяет вызывать методы этого класса (поиск по базе и т.п.).

Если вам нужно создать экземпляр модели Test и что-то с ним делать, то все как обычно:

Код: Выделить всё

$model = new Test;
$model->param1 = '123';
$model->test_model();
$model->delete(); 
nepster
Сообщения: 838
Зарегистрирован: 2013.01.02, 03:35

Re: вызов модели

Сообщение nepster »

большое спасибо.

Сделал вот так :

модель

Код: Выделить всё

    var $command;
    
    public function __construct()
    {
        $this->command = Yii::app()->db->createCommand();
    }
    

    
    public static function model($className=__CLASS__)
    {
        return parent::model($className);
    }


    // таблица пользователей 
    public function tableName()
    {
        return '{{users}}';
    }
    
    
    // общее кол-во пользователей на сайте 
    public function usersCount()
    {
        // кол-во пользователей в базе данных
        return $this->command->select('COUNT(*)')->from($this->tableName())->queryScalar();
    }

контроллер

Код: Выделить всё

    var $UsersModel;
    
    public function __construct()
    {
        // подключаем модель 
        Yii::import('application.modules.users.models.UsersModel');
        
        // модель пользователей 
        $this->UsersModel = new UsersModel;
    }

    public function actionIndex()
    {
               echo '<p>Всего пользователей на сайте: '.$this->UsersModel->usersCount().'</p>';
    }


все сработало
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: вызов модели

Сообщение ElisDN »

Всё, что Вы написали можно заменить одной строкой:

Код: Выделить всё

public function actionIndex()
{
    Yii::import('application.modules.users.models.UsersModel');
    echo '<p>Всего пользователей на сайте: ' . UsersModel::model()->count() . '</p>';
}
Ответить