Список форумов Cake-PHP.ru Cake-PHP.ru
Форум программистов CakePHP
(на сайт)
 
 Watched TopicsWatched Topics   FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

сложные отношения таблиц

 
Начать новую тему   Ответить на тему    Список форумов Cake-PHP.ru -> Общий
Предыдущая тема :: Следующая тема  
Автор Сообщение
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    Заголовок сообщения: Ответить с цитатой Изменить/удалить это сообщение

Кейк никогда ничего не игнорирует Smile

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
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Имя
Сообщение

Смайлики
Very Happy Smile Sad Surprised
Shocked Confused Cool Laughing
Mad Razz Embarassed Crying or Very sad
Evil or Very Mad Twisted Evil Rolling Eyes Wink
Exclamation Question Idea Arrow
Дополнительные смайлики

 
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов Cake-PHP.ru -> Общий Часовой пояс: GMT + 3
Страница 1 из 1

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


Powered by phpBB © 2001, 2005 phpBB Group
Русская поддержка phpBB

Рейтинг@Mail.ru