Русскоязычный форум, посвященный фреймворку Kohana

Все о фреймворке Kohana. Обсуждение уроков, документации.
Текущее время: 28 мар 2024, 23:22

Часовой пояс: UTC + 4 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 9 ] 
Автор Сообщение
 Заголовок сообщения: Подгрузка связей в ORM
СообщениеДобавлено: 11 июн 2013, 15:04 
Не в сети
Новичок

Зарегистрирован: 19 фев 2013, 08:32
Сообщения: 23
День добрый! Народ подскажите по связям и их подгрузке

Есть модель которая понятно с чем и как связана
Код:
class Model_Article extends ORM {
   
   protected $_table_name = 'articles';
   protected $_belongs_to = array(
              'article'  => array(
         'model'       => 'articlecat',
         'foreign_key' => 'category_id',)
         );

Вызов в контроллере происходит банально
Код:
$articles = ORM::factory('Article');
    $articles = $articles->order_by('id', 'DESC') // DESC или ASC
                   ->limit(1)
                   ->offset(0)
                   ->with('articlecat')
                   ->find_all();

[url]http://kohana3.ru/module/orm#многие-ко-многим[/url] вроде бы метод ->with('articlecat') должен формировать и подгружать данные по запросу
Код:
SELECT `category`.`id` AS `category:id`, `category`.`name` AS `category:name`, `post`.* FROM `posts` AS `post`
LEFT JOIN `categories` AS `category` ON (`category`.`id` = `post`.`category_id`)

т.е. выбирать категорию которой соответствует статья. Конечно же приведенный код не работает потому что я никак не соображу как же передать category_id последней статьи в id category(туфталогия какаято :D ). И собственно вопросы:
как же передать эту долбаную category_id в id category;
в оф.мануале ко3.3 описания метода не нашел, работает ли он с кохана 3.3;

ПОМОГИТЕ ДИЛЕТАНТУ!!! ПОЖАЛУЙСТА!!!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Подгрузка связей в ORM
СообщениеДобавлено: 11 июн 2013, 16:30 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 02 апр 2013, 16:26
Сообщения: 474
Откуда: Сергиев Посад
что твой код должен делать? выводить последнюю добавленную статью?

_________________
Майкл Джордан играет в баскетбол. Чарльз Мэнсон убивает людей. Я пишу код. У каждого свой талант.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Подгрузка связей в ORM
СообщениеДобавлено: 11 июн 2013, 16:54 
Не в сети
Новичок

Зарегистрирован: 19 фев 2013, 08:32
Сообщения: 23
WinterSilence писал(а):
что твой код должен делать? выводить последнюю добавленную статью?

Статью он выводит. Никак не соображу каким образом вытащить из получаемых данных значение поля category_id и по этому параметру вывести название категории к которой принадлежит статья.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Подгрузка связей в ORM
СообщениеДобавлено: 11 июн 2013, 17:07 
Не в сети
Новичок

Зарегистрирован: 19 фев 2013, 08:32
Сообщения: 23
Код:
Database_Exception [ 1054 ]: Unknown Column 'Articlecat.Category_id' In 'Where Clause' [ SELECT `Articlecat`.`Id` AS `Id`, `Articlecat`.`Title` AS
 `Title`, `Articlecat`.`Alt_title` AS `Alt_title` FROM `Articlecats` AS `Articlecat` WHERE `Articlecat`.`Category_id` = '63' LIMIT 1 ]

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Подгрузка связей в ORM
СообщениеДобавлено: 11 июн 2013, 17:35 
Не в сети
Новичок

Зарегистрирован: 19 фев 2013, 08:32
Сообщения: 23
РЕШИЛ!!!!ЗАРАБОТАЛА!!!
В общем суть проблемы сводилась к тому что бы подгрузить название категории к статье, на форуме где то обсуждалось, но кода было очень много, на метод подгрузки набрел случайно вот его реализация.
Модель
Код:
class Model_Article extends ORM {
   
   protected $_table_name = 'articles';
   protected $_belongs_to  = array(
      'articlecats'  => array(
         'model'       => 'articlecat',
         'foreign_key' => 'category_id',)
         );

Контроллер
Код:
$articles = ORM::factory('Article');
         $articles = $articles->order_by('id', 'DESC') // DESC или ASC
                   ->limit(1)
                   ->offset(0)
                   ->with('articlecats')// ЗАМЕЧАТЕЛЬНЫЙ МЕТОД КОХАНА - ПОДГУЗКА СВЯЗИ
                   ->find_all();

Метод with формирует запрос (пример)
Код:
SELECT `category`.`id` AS `category:id`, `category`.`name` AS `category:name`, `post`.* FROM `posts` AS `post`
LEFT JOIN `categories` AS `category` ON (`category`.`id` = `post`.`category_id`)

Вид
Код:
<?php echo URL::site('article/'. $article->articlecats->id .'-'. $article->articlecats->alt_title); ?>">
<?php echo $article->articlecats->title; ?>

Резюмирую:
метод with обращается к модели и подгружает связь указанную в псевдониме и передает ее в формируемый объект класса.
Модератор, прошу прощения не знаю как удалить лишние "записки сумасшедшего"


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Подгрузка связей в ORM
СообщениеДобавлено: 11 июн 2013, 18:18 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 02 апр 2013, 16:26
Сообщения: 474
Откуда: Сергиев Посад
эээ а зачем
Цитата:
->with('articlecats')// ЗАМЕЧАТЕЛЬНЫЙ МЕТОД КОХАНА - ПОДГУЗКА СВЯЗИ

если ты уже задал $_belongs_to ?

http://kohanaframework.org/3.3/guide/or ... ips#hasone

_________________
Майкл Джордан играет в баскетбол. Чарльз Мэнсон убивает людей. Я пишу код. У каждого свой талант.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Подгрузка связей в ORM
СообщениеДобавлено: 11 июн 2013, 19:07 
Не в сети
Новичок

Зарегистрирован: 19 фев 2013, 08:32
Сообщения: 23
WinterSilence писал(а):
эээ а зачем
Цитата:
->with('articlecats')// ЗАМЕЧАТЕЛЬНЫЙ МЕТОД КОХАНА - ПОДГУЗКА СВЯЗИ

если ты уже задал $_belongs_to ?

http://kohanaframework.org/3.3/guide/or ... ips#hasone

"Подгрузка связей работает только со связями типа «Один к одному» (has one) и «Много к одному» (belongs to)."
http://kohana3.ru/module/orm#много-к-одному
написано же было помогите дилетанту)))
Честно говоря не экспериментировал, остановился на рабочем варианте, но очевидно удобство - определить связи в модели и определить метод в объекте класса ....


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Подгрузка связей в ORM
СообщениеДобавлено: 11 июн 2013, 19:34 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 02 апр 2013, 16:26
Сообщения: 474
Откуда: Сергиев Посад
я тоже не шибко специалист, но получается ты одну и туже модель дважды добавляешь, но по разному. по идее достаточно $_belongs_to или $_has_one у модели прописать и $article->articlecats->id будет работать

Код:
Let's say your Post database table schema doesn't have a user_id column but instead has an author_id column which is a foreign key for a record in the User table. You could use code like this:

?
protected $_belongs_to = array(
    'user' => array(
        'foreign_key' => 'author_id',
    ),
);

If you wanted access a post's author by using code like $post->author then you would simply need to change the alias and add the model index:

?
protected $_belongs_to = array(
    'author' => array(
        'model'       => 'User',
    ),
);

_________________
Майкл Джордан играет в баскетбол. Чарльз Мэнсон убивает людей. Я пишу код. У каждого свой талант.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Подгрузка связей в ORM
СообщениеДобавлено: 12 июн 2013, 11:38 
Не в сети
Новичок

Зарегистрирован: 19 фев 2013, 08:32
Сообщения: 23
WinterSilence писал(а):
я тоже не шибко специалист, но получается ты одну и туже модель дважды добавляешь, но по разному. по идее достаточно $_belongs_to или $_has_one у модели прописать и $article->articlecats->id будет работать

Код:
Let's say your Post database table schema doesn't have a user_id column but instead has an author_id column which is a foreign key for a record in the User table. You could use code like this:

?
protected $_belongs_to = array(
    'user' => array(
        'foreign_key' => 'author_id',
    ),
);

If you wanted access a post's author by using code like $post->author then you would simply need to change the alias and add the model index:

?
protected $_belongs_to = array(
    'author' => array(
        'model'       => 'User',
    ),
);

Привет, глубоко не ковырял, проверю отпишусь


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 9 ] 

Часовой пояс: UTC + 4 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 16


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Все о фреймворке Kohana  | 
Powered by phpBB® Forum Software © phpBB Group