Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Serginho
цитировать
Зарегистрирован: 27 Ноя 2009 17:19:14 Сообщения: 26
|
Добавлено: 27 Ноя 2009 17:27:47 Заголовок сообщения: Related tables |
|
|
Доброго времени суток.
Суть пробелмы.
Есть 3 таблицы в БД: users, cities, countries и соответствующие им модели
users:
Код: |
<?php
class User extends AppModel{
var $name = 'User';
var $belongsTo = array(
'City' => array(
'className' => 'City',
'foreignKey' => 'city_id'
)
);
}
?>
|
cities
Код: |
<?php
class City extends AppModel{
var $name = 'City';
var $belongsTo = array(
'Country' => array(
'className' => 'Country',
'foreignKey' => 'country_id'
)
);
}
?>
|
countries
Код: |
<?php
class Country extends AppModel{
var $name = 'Country';
}
?>
|
Как видно, талицы связаны по id.
В контроллере вывожу их на екран с помощью paginate:
Код: |
$this->paginate = array(
'limit' => $limit,
'fields' => array(
'User.id',
'User.first_name',
'City.name',
'User.last_name',
'User.city_id',
'User.email'));
$data = $this->paginate('User');
$this->set('users', $data);
|
Вопрос:
Как мне добавить поле Country.name? Ведь связано с моделью City
Надеюсь понятно обьяснил. Заранее спасибо. _________________ No pain, no gain. |
|
Вернуться к началу |
|
|
Vlad
цитировать
Зарегистрирован: 02 Ноя 2007 11:45:52 Сообщения: 241
|
Добавлено: 27 Ноя 2009 23:51:05 Заголовок сообщения: |
|
|
http://book.cakephp.org/view/474/Containable поможет |
|
Вернуться к началу |
|
|
Serginho
цитировать
Зарегистрирован: 27 Ноя 2009 17:19:14 Сообщения: 26
|
Добавлено: 28 Ноя 2009 00:43:47 Заголовок сообщения: |
|
|
Насчёт containable я в курсе. Моя проблема в том, что мои таблицы cities и countries тоже связаны по id.
И, собственно, Model "Country" is not associated with model "User".
Мне бы кусочек кода для примера... _________________ No pain, no gain. |
|
Вернуться к началу |
|
|
Vlad
цитировать
Зарегистрирован: 02 Ноя 2007 11:45:52 Сообщения: 241
|
Добавлено: 28 Ноя 2009 12:28:40 Заголовок сообщения: |
|
|
Ммм. Может было бы (в принципе) давать ссылку на код подготовленный для работы?
Это не к вам, Serginho претензия, а просто идея для всех.
Мне, чтобы поковыряться с вашим кодом - надо создать проект, залепить базу, сделать примитивную выборку и т.п. И найти солюшен.
Мне, как человеку - лень чем-то заниматься. Если бы я по клику мог бы скачать готовый (неработающий) кейк-код под 1.2.5 - например, только app и в комплекте дамп базы.
Я бы поковырялся, и может быть решил бы. А сейчас - некогда собирать отдельный проект. Ну и лень |
|
Вернуться к началу |
|
|
Serginho
цитировать
Зарегистрирован: 27 Ноя 2009 17:19:14 Сообщения: 26
|
Добавлено: 28 Ноя 2009 12:38:48 Заголовок сообщения: |
|
|
Я всё прекрасно понимаю.
Я просто не думал, что моя проблема потребует таких мер . Вроде бы типичная задача, а решения найти немогу. _________________ No pain, no gain. |
|
Вернуться к началу |
|
|
Vlad
цитировать
Зарегистрирован: 02 Ноя 2007 11:45:52 Сообщения: 241
|
Добавлено: 28 Ноя 2009 21:49:17 Заголовок сообщения: |
|
|
А я понимаю, что проблемы никакой нет, и всё чудесным образом решается штатными средствами кейка и рекурсией = 2. Но так лень собирать под пример проект ) |
|
Вернуться к началу |
|
|
Serginho
цитировать
Зарегистрирован: 27 Ноя 2009 17:19:14 Сообщения: 26
|
Добавлено: 29 Ноя 2009 16:20:32 Заголовок сообщения: |
|
|
Vlad, большое спасибо, что не прошли мимо=)
Вот ссылка, просмотрите, буду признателен.
http://mfc-marcel.zzl.org/adressbook_cake.rar
(на хостинг не обращайте внимания, сторонний проект). _________________ No pain, no gain. |
|
Вернуться к началу |
|
|
Vlad
цитировать
Зарегистрирован: 02 Ноя 2007 11:45:52 Сообщения: 241
|
Добавлено: 29 Ноя 2009 22:41:25 Заголовок сообщения: |
|
|
dump базы, плиз ) |
|
Вернуться к началу |
|
|
Serginho
цитировать
Зарегистрирован: 27 Ноя 2009 17:19:14 Сообщения: 26
|
Добавлено: 29 Ноя 2009 23:10:19 Заголовок сообщения: |
|
|
Без проблем, даже не знаю, как вас благодарить...
http://mfc-marcel.zzl.org/adress.sql _________________ No pain, no gain. |
|
Вернуться к началу |
|
|
Vlad
цитировать
Зарегистрирован: 02 Ноя 2007 11:45:52 Сообщения: 241
|
Добавлено: 30 Ноя 2009 11:45:05 Заголовок сообщения: |
|
|
Ммм. Я правильно понял, нужно было вот это?
Код: |
app/controllers/users_controller.php (line 32)
Array
(
[0] => Array
(
[User] => Array
(
[id] => 1
[first_name] => John
[last_name] => Doe
[city_id] => 1
[email] => john.doe@gmail.com
)
[City] => Array
(
[id] => 1
[country_id] => 1
[name] => Kirovograd
[Country] => Array
(
[id] => 1
[name] => Ukraine
)
)
)
[1] => Array
(
[User] => Array
(
[id] => 2
[first_name] => Mike
[last_name] => Henrikson
[city_id] => 2
[email] => mike@yahoo.com
)
[City] => Array
(
[id] => 2
[country_id] => 2
[name] => New York
[Country] => Array
(
[id] => 2
[name] => USA
)
)
)
...
|
Если да, то в $this->paginate - добавляешь $recursive => 2
Если нет, то опиши ещё раз точнее - что тебе надобно |
|
Вернуться к началу |
|
|
Vlad
цитировать
Зарегистрирован: 02 Ноя 2007 11:45:52 Сообщения: 241
|
Добавлено: 30 Ноя 2009 14:44:43 Заголовок сообщения: |
|
|
Но если посмотреть на то, какое кол-во запросов генерит кейк.
Я бы, всё же, предложил не привязывать табличку Стран.
А сделать запрос (как у тебя был)
т.е. получать прсто country_id
Второе - добавить банальный Country->find all (только название - name)
Третье, при помощи В Set::подходящей функции добавить в City необходимое поле COuntry['name']
(Описание функции Set) http://evilbloodydemon.wordpress.com/2009/01/20/set-class-master-of-arrays/ |
|
Вернуться к началу |
|
|
Serginho
цитировать
Зарегистрирован: 27 Ноя 2009 17:19:14 Сообщения: 26
|
Добавлено: 30 Ноя 2009 15:28:54 Заголовок сообщения: |
|
|
Vlad, Большое спасибо! Именно то, что нужно. _________________ No pain, no gain. |
|
Вернуться к началу |
|
|
Serginho
цитировать
Зарегистрирован: 27 Ноя 2009 17:19:14 Сообщения: 26
|
Добавлено: 30 Ноя 2009 16:36:31 Заголовок сообщения: |
|
|
А теперь появился новый вопрос:
Вывести то я вывел, а каким образом мне сделать вот такой запрос:
Код: |
.....
$this->paginate = array(
'recursive' => 2
);
.....
$this->paginate('User',array('User.first_name LIKE' => $Keywords,'Country.name LIKE'=>$Country));
|
Поля Country.name напрочь не видит _________________ No pain, no gain. |
|
Вернуться к началу |
|
|
Vlad
цитировать
Зарегистрирован: 02 Ноя 2007 11:45:52 Сообщения: 241
|
Добавлено: 30 Ноя 2009 16:52:46 Заголовок сообщения: |
|
|
А что, сделать запрос который, в отличие от LIKE будет СУРЬЁЗНО быстрее, никак низя?
City.country_id => $id
$id = число
И никаких LIKE запросов? М? |
|
Вернуться к началу |
|
|
Serginho
цитировать
Зарегистрирован: 27 Ноя 2009 17:19:14 Сообщения: 26
|
Добавлено: 30 Ноя 2009 17:05:54 Заголовок сообщения: |
|
|
Век живи - век учись.
В очередной раз спасибо. _________________ No pain, no gain. |
|
Вернуться к началу |
|
|
|