База данных CakePHP, как это работает?

У меня есть 3 таблицы: пользователи, изображения (внешний ключ к user_id), комментарии (внешние ключи: user_id и image_id)

Может кто-нибудь объяснить мне или отправить мне ссылку на хороший учебник, как работать с базой данных? Я имею в виду, например: 1. Я хочу взять все изображения с комментариями в таблице комментариев. В SQL: выберите i из изображений i, Commets c, где i.id=c.image_id???

Можете ли вы объяснить мне, как я могу получить доступ от одного контроллера к другой модели? Я пытался в контроллере изображений: $data = $this->Image->query('Выбрать * из изображений i, комментарии c, где i.id=c.image_id'); И в представлении: $image['id'], но у меня есть ошибка: неопределенный индекс: id [APP\views\images\commented.ctp,

ТАК это не работает:/

  1. Как я могу удалить изображение и все его комментарии? Я использовал Zend, и я привыкаю к ​​нему, и я понятия не имею, как сделать то же самое, что и в cakePHP:/

Может кто-нибудь объяснить мне, как работать с базой данных в этом cakePHP, я знаю, что есть функции find, findAll и т. Д., Но все они с уровня контроллера ex. $this->Image->find() и т. д.

Мне нужен лучший учебник, чем базовая кулинарная книга cakePHP:/. Я открыт для любых предложений. С Уважением,

1 ответ

Решение

Вы ссылаетесь на модели в контроллере одним из многих способов. Два распространенных способа - это использование переменной в верхней части контроллера:

var $uses = array('User','Image');

Или вы можете встроить его в свои функции:

$this->loadModel('Image');
$this->Image->find('all'); ...

Кроме того, если у вас есть модели, связанные внешним ключом, вы можете даже назвать его так:

$this->User->Image->find('all');

Как только вы узнаете, как CakePHP структурирует вещи, это станет очень понятно.

Таким образом, для вашего оператора sql в вопросе вы можете сделать что-то вроде следующего из контроллера пользователя:

class UsersController extends AppController {
   var $name = 'Users';
   var $uses = array('User','Image','Comments');

   function {my_function_name}() {
       $this->Images->recursive = 1;
       $images = $this->Image->find('all');
   }
}

Теперь, пока ваши отношения верны в модели, рекурсивная функция будет строить массив изображений со всеми прикрепленными к нему комментариями.

array(
   [Image] => array(
        image data,
        [comments] => array(
            [0] comment data,
            [1] comment data,
            [2] ...
        )
    )
)

Я надеюсь, что по крайней мере подтолкнет вас в правильном направлении. Удачного кодирования!

Другие вопросы по тегам