Русскоязычный форум, посвященный фреймворку Kohana
http://forum.kohanaframework.su/

Объясните пожалуйста на простом примере работу ОРМ
http://forum.kohanaframework.su/viewtopic.php?f=33&t=656
Страница 1 из 1

Автор:  vchv [ 26 май 2013, 02:41 ]
Заголовок сообщения:  Объясните пожалуйста на простом примере работу ОРМ

Создаю модель
Код:
<?php defined('SYSPATH') or die('No direct script access.');
 
class Model_Video extends ORM {
   
   protected $_table_name = 'videos';

 
} //End Video

Контроллер
Код:
public function action_video()
    {
      
      $videos = ORM::factory('Video')->find_all();
      $this->template->videos = $videos;
      $this->template->content = View::factory('/pages/video');
      
    }

Пытаюсь вывести в вид
Код:
<?php foreach($videos as $video): ?>
            <li class="one_third first"><?php echo $video->code; ?></li>
            <?php endforeach; ?>

И ни фига ругается, говорит что переменная не определена что я делаю не так?

Автор:  nkl [ 26 май 2013, 03:04 ]
Заголовок сообщения:  Re: Объясните пожалуйста на простом примере работу ОРМ

Цитата:
И ни фига ругается, говорит что переменная не определена что я делаю не так?

Какая переменная не определена? Можно снапшот ошибки в студию? Телепат в отпуске...

Автор:  vchv [ 26 май 2013, 08:39 ]
Заголовок сообщения:  Re: Объясните пожалуйста на простом примере работу ОРМ

Скриншот во вложенном файле, ругается
Код:
ErrorException [ Notice ]: Undefined variable: videos

APPPATH\views\pages\video.php [ 67 ]

62     <div id="gallery" class="one_half">
63       <section>
64         <figure>
65           <h2>Gallery Title Goes Here</h2>
66           <ul class="clear">
67           <?php foreach($videos as $video): ?>
68             <li class="one_third first"><?php echo $video->code; ?></li>
69             <?php endforeach; ?>


Вложения:
scrin.JPG
scrin.JPG [ 159.42 КБ | Просмотров: 7313 ]

Автор:  Sergey [ 26 май 2013, 12:46 ]
Заголовок сообщения:  Re: Объясните пожалуйста на простом примере работу ОРМ

Код:
<?php

public function action_video
()
{
      $videos = ORM::factory('Video');

      $total = $videos->reset(FALSE)->count_all();
      if ($total == 0)
      {
            $this->response->body('No videos found');
            return;
      }

      $view = View::factory('/pages/video')
                  ->bind('videos',      $videos);

      $posts = $posts->order_by('поле_по_которому_сортируете', 'DESC') // DESC или ASC
                     ->limit(лимит)
                     ->offset(сдвиг_относительно_первого_элемента)
                     ->find_all();

      $this->template->content = $view;
}
 

Автор:  vchv [ 26 май 2013, 19:22 ]
Заголовок сообщения:  Re: Объясните пожалуйста на простом примере работу ОРМ

Sergey писал(а):
Код:
<?php

public function action_video
()
{
      $videos = ORM::factory('Video'); //здесь понятно - обращение к модели создание экземпляра класса

      $total = $videos->reset(FALSE)->count_all();// эту часть вообще не вкурил, что за переменная нафига она?
      if ($total == 0)
      {
            $this->response->body('No videos found');
            return;
      }

      $view = View::factory('/pages/video') //это понятно создали переменную вида, забиндили то что вытащила из базы
                  ->bind('videos',      $videos);

      $posts = $posts->order_by('поле_по_которому_сортируете', 'DESC') // DESC или ASC// тупо не вкурил что объявляем и зачем
                     ->limit(лимит)
                     ->offset(сдвиг_относительно_первого_элемента)
                     ->find_all();

      $this->template->content = $view;//это я понял
} 

Благодарю за внимание, но объясните пожалуйста что к чему и почему. Проблема в том что не понимаю как это работает потому и не могу написать код рабочий, в уроке по орм вроде все понятно перехожу к практике не получается, с обычными sql запросами все работает а с орммом в стал в ступор. Еще раз спасибо за внимание.
И если не трудно подскажите у меня с моим кодом вылетает ошибка что переменная video не определена значит проблема с передачей ее в вид из контроллера или при определении ее из базы???

Автор:  Sergey [ 26 май 2013, 23:04 ]
Заголовок сообщения:  Re: Объясните пожалуйста на простом примере работу ОРМ

А что собственно не понятно?
vchv писал(а):
// эту часть вообще не вкурил, что за переменная нафига она?

Код:
if ($total == 0) 

В $total помещаем общее кол-во найденного.

vchv писал(а):
// тупо не вкурил что объявляем и зачем

order_by() метод, который сортирует в вашем случае найденное. сортирует по полю, которое вы укажете.
например order_by('created', 'DESC') или order_by('date', 'DESC') или order_by('name', 'DESC').
второй аргумент DESC или ASC - то, как отсортировать найденное, по возрастанию или убыванию.
далее limit(лимит) означает, что вы можете получить из найденного точное кол-во элементов, например на странице нужно показать только 10 элементов. использовать так: limit(10) или так limit(18345).
если вы хотите показать пользователю вторую страницу с найденным, вам понадобится показать ему элменты не 1-10, например, а 11-20, верно? для получения элементов со сдвигом, например в 10 позиции используется метод offset(10)

так понятнее?

Автор:  vchv [ 27 май 2013, 12:47 ]
Заголовок сообщения:  Re: Объясните пожалуйста на простом примере работу ОРМ

Код:
<?php

public function action_video()
{
      $videos = ORM::factory('Video'); //здесь понятно - обращение к модели создание экземпляра класса

      $total = $videos->reset(FALSE)->count_all();// вкурил, работает и без этой проверки. А ее в принципе обязательно делать?
      if ($total == 0)
      {
            $this->response->body('No videos found');
            return;
      }

      $view = View::factory('/pages/video') //это понятно создали переменную вида, забиндили то что вытащила из базы
                  ->bind('videos',      $videos);

      $posts = $posts->order_by('поле_по_которому_сортируете', 'DESC') // DESC или ASC
/**не вкурил что объявляем и зачем потому что ввело в заблуждение название переменной, с $videos все работает.
 * А вообще это ключевой момент почему у меня сразу не пошло в  $view, $videos забиндил а переменную то не
* определил, балбес.*/
                     ->limit(лимит)
                     ->offset(сдвиг_относительно_первого_элемента)
                     ->find_all();

      $this->template->content = $view;//это я понял

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

I love orm!

Автор:  Sergey [ 27 май 2013, 13:30 ]
Заголовок сообщения:  Re: Объясните пожалуйста на простом примере работу ОРМ

да, опечатался :)
не $posts = $posts->order_by
а
$videos = $videos->order_by

Автор:  borodatych [ 28 май 2013, 19:03 ]
Заголовок сообщения:  Re: Объясните пожалуйста на простом примере работу ОРМ

Причина была в том, что ТС не забиндил переменную:
Цитата:
->bind('videos', $videos);

..судя по скриншоту и контроллеру из первого поста..

Страница 1 из 1 Часовой пояс: UTC + 4 часа [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/