| Предыдущая тема :: Следующая тема | 
	
	
		| Автор | Сообщение | 
	
		| 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
 | 
 |  | 
	
		| Вернуться к началу |  | 
	
		|  | 
	
	
	
	
		|  |