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

Related tables
На страницу 1, 2  След.
 
Начать новую тему   Ответить на тему    Список форумов Cake-PHP.ru -> Общий
Предыдущая тема :: Следующая тема  
Автор Сообщение
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 Sad

Надеюсь понятно обьяснил. Заранее спасибо.
_________________
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".

Мне бы кусочек кода Rolling Eyes для примера...
_________________
No pain, no gain.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Vlad

цитировать



Зарегистрирован: 02 Ноя 2007 11:45:52
Сообщения: 241

СообщениеДобавлено: 28 Ноя 2009 12:28:40    Заголовок сообщения: Ответить с цитатой

Ммм. Может было бы (в принципе) давать ссылку на код подготовленный для работы?

Это не к вам, Serginho претензия, а просто идея для всех.

Мне, чтобы поковыряться с вашим кодом - надо создать проект, залепить базу, сделать примитивную выборку и т.п. И найти солюшен.

Мне, как человеку - лень чем-то заниматься. Если бы я по клику мог бы скачать готовый (неработающий) кейк-код под 1.2.5 - например, только app и в комплекте дамп базы.

Я бы поковырялся, и может быть решил бы. А сейчас - некогда собирать отдельный проект. Ну и лень Smile
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Serginho

цитировать



Зарегистрирован: 27 Ноя 2009 17:19:14
Сообщения: 26

СообщениеДобавлено: 28 Ноя 2009 12:38:48    Заголовок сообщения: Ответить с цитатой

Я всё прекрасно понимаю.

Я просто не думал, что моя проблема потребует таких мер Smile . Вроде бы типичная задача, а решения найти немогу.
_________________
No pain, no gain.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Vlad

цитировать



Зарегистрирован: 02 Ноя 2007 11:45:52
Сообщения: 241

СообщениеДобавлено: 28 Ноя 2009 21:49:17    Заголовок сообщения: Ответить с цитатой

А я понимаю, что проблемы никакой нет, и всё чудесным образом решается штатными средствами кейка и рекурсией = 2. Но так лень собирать под пример проект Smile)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
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
Если нет, то опиши ещё раз точнее - что тебе надобно Smile
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
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 напрочь не видит Sad
_________________
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.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Имя
Сообщение

Смайлики
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, 2  След.
Страница 1 из 2

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


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

Рейтинг@Mail.ru