Cake-PHP.ru
Форум программистов CakePHP
(на сайт)
Watched Topics
FAQ
Поиск
Пользователи
Группы
Регистрация
Профиль
Войти и проверить личные сообщения
Вход
Список форумов Cake-PHP.ru
->
Общий
Ответить
Имя
Тема
Сообщение
Смайлики
Дополнительные смайлики
Цвет шрифта:
По умолчанию
Тёмно-красный
Красный
Оранжевый
Коричневый
Жёлтый
Зелёный
Оливковый
Голубой
Синий
Тёмно-синий
Индиго
Фиолетовый
Белый
Чёрный
Размер шрифта:
Размер шрифта
Очень маленький
Маленький
Обычный
Большой
Огромный
Закрыть теги
[quote="Xvakin"]Извинте, если вопрос глупый и легко решается... Cake изучаю вторую неделю. Так вот. Для примера делаю коллективный блог. Имеется модель Post, которая belongsTo User и Category, а также hasMany Comments. Каменты в свою очередь тоже belongsTo User и в модели каментов эта ассоциация работает. Как создать ее в модели Post - непонятно. Для примера листинг модели Post: [code] <?php class Post extends AppModel { var $name = 'Post'; var $belongsTo = array('Category' => array('className' => 'Category', 'conditions' => '', 'order' => '', 'dependent' => true, 'foreignKey' => 'category_id' ), 'User' => array('className' => 'User', 'conditions' => '', 'order' => '', 'dependent' => true, 'foreignKey' => 'user_id' ) ); var $hasMany = array('Comments' => array('className' => 'Comment', 'conditions' => '', 'order' => '', 'limit' => '', 'foreignKey' => 'post_id', 'dependent' => true, 'exclusive' => false, 'finderQuery' => '' ) ); } ?> [/code][/quote]
Настройки
HTML
ВЫКЛЮЧЕН
BBCode
ВКЛЮЧЕН
Смайлики
ВКЛЮЧЕНЫ
Отключить в этом сообщении BBCode
Отключить в этом сообщении смайлики
Если у вас плохое зрение или вы не можете прочесть этот код по какой-то другой причине, то обратитесь за помощью к
Администратору
.
Код подтверждения: *
Введите код в точности так, как вы его видите. Код является регистро-зависимым, а символ нуля имеет косую линию внутри цифры.
Часовой пояс: GMT + 3
Перейти:
Выберите форум
CakePHP Форум
----------------
Общий
Установка и настройка
Творчество
Вопросы и пожелания
Комментарии к главам руководства по CakePHP 1.1
Обзор темы
Автор
Сообщение
KPOTOB
Добавлено: 05 Мар 2008 11:25:57
Заголовок сообщения:
'foreign_key' => 'resource_id',
должно быть foreignKey
cyberfox
Добавлено: 05 Мар 2008 06:41:02
Заголовок сообщения:
К предыдущему посту: решил проблему декомпозицией Comments на несколько моделей NewsComments и т.д.
Гость
Добавлено: 05 Мар 2008 06:17:38
Заголовок сообщения:
У меня с ассоциацией возникает несколько иная проблема: в переведенном мануале написано, что foreignKey позволяет задать имя ключа не по правилам именования cake, но это как раз и не выходит.
Код:
class Comment extends AppModel{
public $name = 'Comment';
public $belongsTo = array(
'User' => array( 'className' => 'User',
'foreignKey'=> 'user_id'),
'News' => array('className' => 'News',
'foreignKey'=> 'resource_id')
);
}
И в модели новостей:
Код:
public $hasMany = array( 'Comment'=>array (
'className' => 'Comment',
'conditions' => 'Comment.model=0',
'order' => 'Comment.created DESC',
'foreign_key' => 'resource_id',
'depend' => true,
'exclusive' => false,
'findQuery' => ''
)
);
Т.е. я пытаюсь использовать FK Comment.recource_id для идентификации комментируемого ресурса в модели Comment.model. Но при выборке из контроллера новостей cake пытается использовать ключь Comment.news_id, которого нет. Как мне использовать свое имя ключа (cake 1.2b) ?
KPOTOB
Добавлено: 15 Дек 2007 16:15:08
Заголовок сообщения:
https://trac.cakephp.org/ticket/3584
ztalker
Добавлено: 14 Ноя 2007 19:19:16
Заголовок сообщения:
KPOTOB писал(а):
Не уверен только что это бага - скорее всего ассоциации не совем верно описаны(или построены). В данном случае - у тебя класс разворачиваеся вниз (по Subs) и вверх (по Parents) одновременно. B каждый из них также будет развернут вверх и вних - ясно что у тебя вечная рекурсия - вот php и грохается.
Это понятно, что разворот идет вверх и вниз, но в 1.1 это работало! А теперь для 1.2 нужно либо переделывать (что очень не желательно), либо ждать исправления, если это баг конечно...
KPOTOB писал(а):
По теме дерева
Не врубился как это юзать
KPOTOB
Добавлено: 14 Ноя 2007 13:05:45
Заголовок сообщения:
http://tempdocs.cakephp.org/#TOC95827 По теме дерева
KPOTOB
Добавлено: 14 Ноя 2007 12:58:58
Заголовок сообщения:
Виснет потому что у тебя дерево ассоциации до конца развернуть не может в Model::__construct - оно у тебя банально бесконечное
Аккурат вчера я в тоже гавно вступил.
Как понимаю кейк выстраивает полное дерево классов по ассоциациациям без учета $recursive а тупо пока все не развернет.
Не уверен только что это бага - скорее всего ассоциации не совем верно описаны(или построены). В данном случае - у тебя класс разворачиваеся вниз (по Subs) и вверх (по Parents) одновременно. B каждый из них также будет развернут вверх и вних - ясно что у тебя вечная рекурсия - вот php и грохается.
ztalker
Добавлено: 14 Ноя 2007 09:03:56
Заголовок сообщения:
нарыл. но проблему не решил.
Вышеуказанное это описание ассоциаций в DictionaryType. В модели Dictionary следующие ассоциации:
Код:
public $belongsTo = array(
// тип словаря
'DictionaryType' => array(
'className' => 'DictionaryType',
'conditions' => '',
'order' => '',
'foreignKey' => 'dictionary_type_id'),
// словарь верхнего уровня - куда вложен этот
'Parent' => array(
'className' => 'Dictionary',
'conditions' => '',
'order' => '',
'foreignKey' => 'parent_id')
);
public $hasMany = array(
// словарь нижнего уровня, которые вложенны в этот
'Subs' => array(
'className' => 'Dictionary',
'conditions' => '',
'order' => '',
'limit' => '',
'foreignKey' => 'parent_id',
'dependent' => false,
'exclusive' => false,
'finderQuery' => '')
);
Т.е. типы вложены друг в друга и словари вложены друг в друга, сделано это для организации следующего:
DictionaryType:
Код:
id | name | parent_id
1 | Страны | null
2 | Города | 1
т.е. тип словаря "города" вложен с "страны", чтобы при добавлении новых элементов сразу было ясно кому подчиняются словари.
Dictionary:
Код:
id | DictionaryType | name | parent_id
1 | 1 (Страны) | Россия | null
2 | 2 (Города) | Новосибирск | 1 (Россия)
3 | 1 (Страны) | USA | null
4 | 2 (Города) | NY | 3 (USA)
т.е. "Новосибирск" это "Города" но вложен в словарь "Россия", а "Россия" это уже "Страны", аналогично "NY" в "USA".
Так вот если прописать все вышеперечисленные ассоциации (включая мое предыдущее сообщение), то в версии 1.1 все работает, а версии 1.2 cakephp виснет. Возникает вопрос - это косяк бэты 1.2 или просто надо идти другим путем?
ztalker
Добавлено: 14 Ноя 2007 08:04:15
Заголовок сообщения:
У меня появилась проблемка
Есть две модели Dictionary (словарь) и DictionaryType (тип словаря).
Тип словаря может быть вложен в другой словарь полем parent_id, и в тип словаря вложены словари.
Т.е. ассоциации выглядят так:
Код:
public $belongsTo = array(
// тип словаря - "Родитель", куда вложен этот
'Parent' => array(
'className' => 'DictionaryType',
'conditions' => '',
'order' => '',
'foreignKey' => 'parent_id'),
);
public $hasMany = array(
// вложенные типы словарей
'Subs' => array(
'className' => 'DictionaryType',
'conditions' => '',
'order' => '',
'limit' => '',
'foreignKey' => 'parent_id',
'dependent' => false,
'exclusive' => false,
'finderQuery' => ''),
// вложенные словари
'Dictionary' => array(
'className' => 'Dictionary',
'conditions' => '',
'order' => '',
'limit' => '',
'foreignKey' => 'dictionary_type_id',
'dependent' => false,
'exclusive' => false,
'finderQuery' => '')
);
Так вот, в версии 1.1 все работало и я методом findAll беру полный список типов и все вложения и родителей. В версии 1.2 - НЕ РАБОТАЕТ. Если в ассоциации $hasMany убрать одно из условий ('Subs' или 'Dictionary' без разницы), то работает, но тогда я уже теряю универсальность модели, и чтобы взять то, что выкинул из ассоциации мне нужно идти через "зад". И это во всех моделях! Если в $hasMany указано больше одной ассоциации, то cakephp просто виснет, даже если перед findAll указываю $this->
Model
->recursive = 0;.
Как исправить данную ситуацию, чтобы вышеуказанная ассоциация работала?
ztalker
Добавлено: 13 Ноя 2007 06:42:34
Заголовок сообщения:
И что? Не работает в таком виде? В чем вопрос?
Вообще прописано верно.
Xvakin
Добавлено: 12 Ноя 2007 16:37:11
Заголовок сообщения: Ассоциации в модели
Извинте, если вопрос глупый и легко решается... Cake изучаю вторую неделю.
Так вот. Для примера делаю коллективный блог. Имеется модель Post, которая belongsTo User и Category, а также hasMany Comments. Каменты в свою очередь тоже belongsTo User и в модели каментов эта ассоциация работает. Как создать ее в модели Post - непонятно.
Для примера листинг модели Post:
Код:
<?php
class Post extends AppModel {
var $name = 'Post';
var $belongsTo = array('Category' =>
array('className' => 'Category',
'conditions' => '',
'order' => '',
'dependent' => true,
'foreignKey' => 'category_id'
),
'User' =>
array('className' => 'User',
'conditions' => '',
'order' => '',
'dependent' => true,
'foreignKey' => 'user_id'
)
);
var $hasMany = array('Comments' =>
array('className' => 'Comment',
'conditions' => '',
'order' => '',
'limit' => '',
'foreignKey' => 'post_id',
'dependent' => true,
'exclusive' => false,
'finderQuery' => ''
)
);
}
?>
Powered by phpBB © 2001, 2005 phpBB Group
Русская поддержка phpBB
Если ничего интересного не нашли, можно рекламу почитать, а рекламируется у нас сегодня «».