CakePHP 2.0 - 2.1, запрос другой модели от контроллера

У меня есть контроллер загрузки, который обрабатывает форматы видеофайлов. В контроллере загрузки вы можете просматривать все загруженные видео и смотреть их. В часах функции у меня есть элемент комментариев, который обновляет таблицу комментариев с помощью идентификатора пользователя (комментарий, оставленный пользователем, который в настоящее время вошел в систему), uploadid (загружен, который в настоящее время просматривается) и комментарий (комментарий пользователя).

У меня форма работает отлично, однако я не уверен, как мне получить информацию из таблицы комментариев, например, какой запрос нужно реализовать?

Какие-либо предложения?


person 001221    schedule 11.04.2012    source источник


Ответы (1)


Я видел другое ваше сообщение Элементы CakePHP не обновляют таблицу, так что у меня вроде есть идея вашей ситуации. Похоже, вы представляете комментарии с помощью своей модели публикации.

Вы хотите запрашивать данные из вашей модели Post в вашем UploadsController, верно?

Если ваша таблица комментариев называется comments, вам необходимо убедиться, что она связана с вашей моделью Post. Cake автоматически связывает модели и таблицы базы данных, если они соответствуют соглашению об именах Cake. Но если они на самом деле разные, вы можете указать настраиваемую таблицу базы данных для своей модели Post:

<?php
class Post extends AppModel {

    var $useTable = "comments" /*Or whatever you named your comments table*/

    ...
}
?>

Вы также должны убедиться, что между публикацией и загрузкой установлены ассоциации модели:

Post belongsTo Upload
Upload hasMany Post

Я заметил, что у вас есть:

Post belongsTo Upload
Upload hasAndBelongsToMany Post

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

Наконец, теперь, когда ассоциации моделей настроены, вы можете получить доступ к связанным моделям в контроллере:

<?php
class UploadsController extends AppController {

    ...

    function watch ($id = null) {

        $this->Upload->id = $id;      
        $this->set('uploads', $this->Upload->read());

        /* To get related comments (Posts) */
        $related_comments = $this->Upload->Post->find('all', array(
            'conditions' => array(
                'Upload.id' => $id /* This condition makes it so only associated comments are found */
            )
        ));
        $this->set('comments', $related_comments);
    }

    ...

 }
 ?>
person penguin egg    schedule 12.04.2012
comment
Спасибо за ответ, я использую HABTM, потому что если я использую hasMany, я получаю ошибку Ошибка базы данных: SQLSTATE [23000]: нарушение ограничения целостности: 1052 Столбец 'uploadid' в предложении where неоднозначен. Используя $ related_comments, я получаю следующую ошибку; Неустранимая ошибка: вызов функции-члена find () для не-объекта в /Applications/XAMPP/xamppfiles/htdocs/evolvids/app/Controller/UploadsController.php в строке 57 Кроме того, я отказался от таблицы и модели комментариев и просто назвал это сообщениями, есть идеи? - person 001221; 12.04.2012
comment
Хорошо, я создал ошибку базы данных, однако (и я помню, что это была первоначальная причина, по которой я использовал HABTM), информация, отраженная из базы данных, дублируется на странице 3 раза при использовании оператора hasMany? Не понимаю, почему это происходит, я установил ограничение на 1, и это тоже не имело значения, какие-либо идеи относительно того, почему это происходит? - person 001221; 12.04.2012
comment
не беспокойтесь, потому что, если я изменю его на $ this- ›Post вместо $ this-› Upload- ›Post, он будет работать отлично! и я сохранил оригинальный HABTM из-за дублирующихся записей, которые он делает на странице. спасибо за вашу помощь :) - person 001221; 12.04.2012