2015-07-02 6 views
4

Я пытаюсь использовать новый CakePHP 3.0, и у меня возникли проблемы с поиском запросов на размещение.CakePHP 3.0 Где поставить запросы

Позволяет сказать, что у нас есть что-то вроде этого, прямо из их документации.

$articles = $this->Articles->find('all', [ 
    'fields' => ['id', 'title'], 
    'conditions' => [ 
     'OR' => ['title' => 'Cake', 'author_id' => 1], 
     'published' => true 
    ], 
    'contain' => ['Authors'], 
    'order' => ['title' => 'DESC'], 
    'limit' => 10, 
]); 

Где разместить этот код? В моем классе контроллера или в папке модели.

Если мне нужно поместить этот код в класс контроллера, и в будущем я хотел бы повторно использовать этот запрос. Нужно ли переписывать запрос в другом контроллере?

Если в папке с образцом, в какую папку я его вставляю? Поведение, сущность или таблица? и как я буду использовать его?

Благодаря

+0

Вы должны написать свой код только в контроллерах, если хотите для повторного использования кода вам необходимо создать компоненты. Url: http://book.cakephp.org/2.0/en/controllers/components.html –

+0

Стыдно, что все связанные с базой данных SQL-коды не могут быть организованы только в папке модели. Спасибо за Ваш ответ. – Beardslapper

+1

@ViswanathPolaki это не правильно. Запросы могут выполняться в контроллерах, но часто лучше размещаются в модели, где они более многоразовые. – drmonkeyninja

ответ

2

если вы только использовать его один раз, вы можете поместить его в действие контроллера. но мы, как наши модели жира, так что вы должны положить его в метод в вашей модели (таблица) для повторного использования (держать свой код DRY)

после этого вы можете использовать метод в контроллерах

$this->loadModel('Model'); //if needed 
$this->Model->nameOfYourMethod(); 
2

Пример кода, который вы указали, может использоваться в контроллере, если установлено $this->Articles (, например, вы находитесь в ArticlesController). Однако в Cake часто лучше перемещать код запроса на уровень модели, где он более многоразовый.

Если вы хотите определить метод запроса для модели, вы делаете это в таблице. Например: -

class ArticlesTable extends Table 
{ 
    public function getAllArticles() { 
     return $this->find('all', [ 
      'fields' => ['id', 'title'], 
      'conditions' => [ 
       'OR' => ['title' => 'Cake', 'author_id' => 1], 
       'published' => true 
      ], 
      'contain' => ['Authors'], 
      'order' => ['title' => 'DESC'], 
      'limit' => 10, 
     ]); 
    } 
} 

Вы свободны вызвать метод, что вам нравится, просто убедитесь, что это что-то ясно, функции метода.

Затем в ArticlesController вы можете назвать это как: -

$articles = $this->Articles->getAllArticles(); 

Вы можете назвать это от любого контроллера, пока загружается модель. Например: -

$this->loadModel('Articles'); 
$articles = $this->Articles->getAllArticles(); 
0

/* Вы можете вызвать этот запрос в контроллере, но убедитесь, что ваша база данных должна иметь статьи рассказ и авторы таблицы и статьи таблица принадлежит автору таблицы. статья table принадлежит авторским средствам в вашей статье, таблица должна иметь author_id. Фактически эта таблица соединяет таблицу статей с таблицей авторов и получает результат обеих таблиц в соответствии с условиями или, а также условия и устанавливает лимит и порядок */