Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
maximt
цитировать
Зарегистрирован: 13 Фев 2009 14:08:06 Сообщения: 10
|
Добавлено: 13 Фев 2009 14:24:44 Заголовок сообщения: сложные отношения таблиц |
|
|
новичек в кейке. возник вопрос
есть базы
users (id,name,city_id)
cities(id,name)
product_type(id,name)
user_products(id,user_id,product_type_id,info)
модель user связана с cities
belongsTo = 'City'
т.е. при выборке юзеров выбирается город соответствующий city_id
в тоже время user связана с user_products
hasMany = 'user_products'
т.е. при выборке юзеров выбираются все продукты с user_id нашего юзера
теперь самое сложное, где мне нужна помощь
мне нужно связать user_products с product_type.
чтобы по product_type_id выбиралось соответствующее имя
пробую создать контроллер user_products
и связать его
belongsTo = 'product_type'
но кейк игнорирует этот контроллер.. как я понимаю генерится свой |
|
Вернуться к началу |
|
|
Саша Гость цитировать
|
Добавлено: 13 Фев 2009 18:57:11 Заголовок сообщения: |
|
|
Кейк никогда ничего не игнорирует
http://book.cakephp.org/view/78/Associations-Linking-Models-Together
Читай доки, смотри логи.
Что касается твой проблемы, я думаю тут с рекурсией трабл, она скорее всего стоит на значении 1, попробуй увеличить ... |
|
Вернуться к началу |
|
|
maximt
цитировать
Зарегистрирован: 13 Фев 2009 14:08:06 Сообщения: 10
|
Добавлено: 13 Фев 2009 21:08:50 Заголовок сообщения: |
|
|
эту страничку заездил уже. но под свой случай не нашел решения..
если имеется ввиду атрибут модели var $recursive
то пробовал прибавлять..
сейчас схема отношений выводит такой лист запросов
SELECT `User`.`id`, `User`.`Name`, `User`.`city_id`, `City`.`id`, `City`.`Name` FROM `users` AS `User` LEFT JOIN `cities` AS `City` ON (`User`.`city_id` = `City`.`id`) WHERE 1 = 1
SELECT `UserProduct`.`id`, `UserProduct`.`user_id`, `UserProduct`.`name`, `UserProduct`.`product_type_id`, `UserProduct`.`info` FROM `user_products` AS `UserProduct` WHERE `UserProduct`.`user_id` IN (1, 2, 3, 4, 5, 6, 7)
вот нужно добиться чтобы во втором запросе тоже был левый джойн.. |
|
Вернуться к началу |
|
|
maximt
цитировать
Зарегистрирован: 13 Фев 2009 14:08:06 Сообщения: 10
|
Добавлено: 14 Фев 2009 08:38:50 Заголовок сообщения: |
|
|
я так понимаю
user_products-hasMany = 'user_products'
генерирует свой контроллер и модель в обход моего контроллера user_products и модели product?
задача то тривиальная , ктото точно сталкивался.. |
|
Вернуться к началу |
|
|
Саша Гость цитировать
|
Добавлено: 16 Фев 2009 11:18:07 Заголовок сообщения: |
|
|
По запросу сложно понять, что там не работает.
Выложи код моделей и их связок ... |
|
Вернуться к началу |
|
|
maximt
цитировать
Зарегистрирован: 13 Фев 2009 14:08:06 Сообщения: 10
|
Добавлено: 17 Фев 2009 12:56:11 Заголовок сообщения: |
|
|
модель одна
Код: |
class User extends AppModel {
var $name = 'User';
var $belongsTo = 'City';
var $hasMany = array('user_products');
}
|
теперь нужно к user_products привязать product_type
в user_products есть поле product_type_id и по нему из product_type выбираем имя продукта с id=product_type_id
пробовал создать модель для user_product и сделать связь $belongsTo = 'product_type';
но привязки не происходит.. |
|
Вернуться к началу |
|
|
evilbloodydemon
цитировать
Зарегистрирован: 11 Окт 2007 20:32:19 Сообщения: 125
|
Добавлено: 17 Фев 2009 13:29:41 Заголовок сообщения: |
|
|
maximt
мне почему-то тяжело понять написанное. вкратце я понял так.
тебе нужно найти пользователей, у которых есть продукты определенной категории.
одним запросом по юзерам тут не отделаешься. выбери продукти в нужной категории, а потом найди пользователей, которые ими владеют.
не забудь зайти в jabber-конференцию cakephp@conference.jabber.ru =) _________________ поздняк метаться - ракеты в воздухе
jabber-конференция по CakePHP - xmpp:cakephp@conference.jabber.ru |
|
Вернуться к началу |
|
|
maximt
цитировать
Зарегистрирован: 13 Фев 2009 14:08:06 Сообщения: 10
|
Добавлено: 17 Фев 2009 14:19:39 Заголовок сообщения: |
|
|
у пользователя есть личные данные и список продуктов.
у продукта есть категория, с описанием этой категории
мне нужно вывести:
информация пользователя и список продуктов пользователя
и конечно вместо айди категории вывести описание этой категории
между юзером и категорией отношений ни каких
только юзер-продукт |
|
Вернуться к началу |
|
|
evilbloodydemon
цитировать
Зарегистрирован: 11 Окт 2007 20:32:19 Сообщения: 125
|
Добавлено: 17 Фев 2009 15:44:31 Заголовок сообщения: |
|
|
maximt
аа, вон оно че, тогда
Цитата: | модель для user_product и сделать связь $belongsTo = 'product_type'; | в самый раз, разбирайся почему именно не работает. выложи код где-нибудь, я посмотрю. _________________ поздняк метаться - ракеты в воздухе
jabber-конференция по CakePHP - xmpp:cakephp@conference.jabber.ru |
|
Вернуться к началу |
|
|
maximt
цитировать
Зарегистрирован: 13 Фев 2009 14:08:06 Сообщения: 10
|
Добавлено: 18 Фев 2009 12:21:19 Заголовок сообщения: |
|
|
код минимальный. вот он. вместе с кейком. 650кб
в корне дамп базы.
http://depositfiles.com/files/vhvbvzuxg
спасибо что откликнулись |
|
Вернуться к началу |
|
|
maximt
цитировать
Зарегистрирован: 13 Фев 2009 14:08:06 Сообщения: 10
|
Добавлено: 18 Фев 2009 14:01:34 Заголовок сообщения: |
|
|
модифицировал контроллер
сделал так
Код: |
var $uses = array('User','Product');
function view($id = null)
{
$this->User->id = $id;
$this->set('users', $this->User->read());
$this->set('products', $this->Product->find('all', array('conditions' => array('user_id' => $id))));
}
|
получилось то что нада.
т.е. связка
Код: | class Product extends AppModel {
var $name = 'Product';
var $belongsTo = 'ProductType';
} |
срабатывает.
теперь думаю как сделать такое для индекса(вывести всех юзеров и все их продукты) |
|
Вернуться к началу |
|
|
evilbloodydemon
цитировать
Зарегистрирован: 11 Окт 2007 20:32:19 Сообщения: 125
|
Добавлено: 18 Фев 2009 16:48:18 Заголовок сообщения: |
|
|
совсем забыл, верни как у тебя было и поставь в запросе 'recursive'=>2
Цитата: | http://book.cakephp.org/view/439/recursive | - как раз твой случай _________________ поздняк метаться - ракеты в воздухе
jabber-конференция по CakePHP - xmpp:cakephp@conference.jabber.ru |
|
Вернуться к началу |
|
|
maximt
цитировать
Зарегистрирован: 13 Фев 2009 14:08:06 Сообщения: 10
|
Добавлено: 19 Фев 2009 17:19:18 Заголовок сообщения: |
|
|
во спасиба. сделал в модел юзера var $recursive=2;
показало
Код: | SELECT `User`.`id`, `User`.`name`, `User`.`city_id`, `User`.`desc`, `City`.`id`, `City`.`name` FROM `users` AS `User` LEFT JOIN `cities` AS `City` ON (`User`.`city_id` = `City`.`id`) WHERE `User`.`id` = 1 LIMIT 1 1 1 1
6 SELECT `City`.`id`, `City`.`name` FROM `cities` AS `City` WHERE `City`.`id` = 3 1 1 1
7 SELECT `Product`.`id`, `Product`.`user_id`, `Product`.`product_type_id`, `Product`.`name`, `Product`.`desc` FROM `products` AS `Product` WHERE `Product`.`user_id` = (1) 2 2 2
8 SELECT `ProductType`.`id`, `ProductType`.`name` FROM `product_types` AS `ProductType` WHERE `ProductType`.`id` = 1 1 1 1
9 SELECT `ProductType`.`id`, `ProductType`.`name` FROM `product_types` AS `ProductType` WHERE `ProductType`.`id` = 3 |
|
|
Вернуться к началу |
|
|
|