База данных 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,
ТАК это не работает:/
- Как я могу удалить изображение и все его комментарии? Я использовал 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] ...
)
)
)
Я надеюсь, что по крайней мере подтолкнет вас в правильном направлении. Удачного кодирования!