CakePHP : Manual/Developing/Models/Understanding

Понимание моделей


Модель представляет вашу модель данных и в объектно-ориентированном программировании есть объект, представляющий «сущность» – машину, человека, дом. Например, блог может иметь много постов и каждый пост может иметь много комментариев. Blog, Post и Comment – это все примеры моделей, ассоциированных друг с другом.

Вот простой пример определения модели в CakePHP:

<?php

class Ingredient extends AppModel {
    var 
$name 'Ingredient';
}

?>


С помощью такого простого определения, модель Ingredient получает всю функциональность, которая нужна вам, для создания запросов с сохранением и удалением данных. Эти волшебные методы унаследованы от родительского класса AppModel. Модель Ingredient расширяет (extends) модель AppModel, которая в свою очередь, расширяет внутренний класс Model. Именно этот класс Model и даёт всю функциональность вашей модели Ingredient.

Промежуточный класс, AppModel пустой и по умолчанию находится в каталоге /cake/. Замещение класса AppModel позволяет вам определить функциональность, которая будет доступна для всех моделей вашего приложения. Для этого вам необходимо создать свой файл app_model.php в корне каталога /app/. Если вы создаете проект, используя Bake, то этот файл будет автоматически сгенерирован.

Создавайте php-файлы ваших моделей в каталоге /app/models/ или в подкаталоге этого каталога. CakePHP найдет их в любом случае. По соглашению файл должен иметь такое же имя, как и класс. Например, ingredient.php.



Смотрите также Поведения, чтобы узнать, как использовать один и тот же код в разных моделях.

Свойство $name необходимо для PHP4, необязательно для PHP5.


После того, как ваша модель определена, она доступна из вашего контроллера. CakePHP автоматически сделает модель доступной, когда её имя будет соответствовать имени контроллера. Например, контроллер IngredientsController будет автоматически инициализировать модель Ingredient и обращаться к ней можно через $this->Ingredient.

<?php

class IngredientsController extends AppController {
    function 
index() {
        
//получает все ингридиенты и передает их в отображение:
        
$ingredients $this->Ingredient->find('all');
        
$this->set('ingredients'$ingredients);
    }
}

?>


Ассоциированные модели доступны через главную модель. В следующем примере модель Recipe имеет ассоциацию с моделью Ingredient.

$this->Recipe->Ingredient->find('all');


Как, вы возможно видели, в контроллерах вы можете присоединять модели и вызывать их прямо из этого контроллера. В следующем примере, модели Recipe и User доступны из текущего контроллера.

<?php
class RecipeController extends AppController {
    var 
$uses = array('Recipe''User');
    function 
index() {
       
$this->Recipe->find('all');
       
$this->User->find('all');
    }
}
?>


Если вы не добавили модель через свойство $uses, то вам необходимо вручную импортировать модель и инициализировать её с помощью действия.

<?php
class RecipeController extends AppController {
    var 
$uses = array('Recipe');
    function 
index() {
       
$this->Recipe->find('all');

       
App::import('Model''User');
       
$user = new User();
       
$user->find('all');
    }
}
?>


<< Модели | Создание таблиц базы данных >>