Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: MVC
Форумы портала PHP.SU » » Объектно-ориентированное программирование » MVC

Страниц (2): [1] 2 »
 

1. navitesting - 17 Марта, 2012 - 21:18:48 - перейти к сообщению
Здравствуйте! Привожу в порядок свой небольшой проект основной паттерн у которого MVC.

Внимание, вопрос!
Как лучше сделать:
1) 1 таблица 1 модель 1 контроллер N видов
2) 1 таблица 1 модель N контроллеров N видов
3) 1 таблица N моделей(добавить/модифицировать/удалить) N контроллеров N видов

И ещё вопрос - например в одной из моделей нужно узнать значения других(ой) таблиц(ы) - как лучше это сделать?

Спасибо!
2. DlTA - 17 Марта, 2012 - 22:22:56 - перейти к сообщению
табличка != модель
контрол =N моделей+ N видов
3. navitesting - 17 Марта, 2012 - 23:04:15 - перейти к сообщению
DlTA Спасибо! А насчёт второго вопроса не можете посоветовать?
4. DlTA - 17 Марта, 2012 - 23:29:17 - перейти к сообщению
это должно было следовать из прошлого ответ

если часть данной модели то соответствующим методом,
если же это не касается данной модели, то произвести вызовом метода соответствующей модели
5. navitesting - 18 Марта, 2012 - 11:55:18 - перейти к сообщению
DlTA
Спасибо! А, если, например, не существует впринципе модели, которая запрашивает те данные, что нужны, из другой таблицы, и использовать её нужно лишь в определённом контексте, как поступить -

1) написать модель к этой таблице без контроллера вида и всего остального отдельно, и вызывать её из МОДЕЛИ которой она нужна

2) написать в МОДЕЛИ метод обращающийся к этой таблице

?

И ещё по поводу видов - вид не обязан быть классом - но лучше может всё таки классом?
Может, смешно и глупо, но хочется чтобы всё было идеально и хоть вид и есть представление - отделить представление от представления - чтобы не было внутри html или php кода вообще( чтобы было чтото одно из двух зол ) -> мне нужно думать в сторону шаблонизаторов или есть какая то альтернатива?
6. caballero - 18 Марта, 2012 - 12:28:20 - перейти к сообщению
Цитата:
но хочется чтобы всё было идеально и хоть вид и есть представление - отделить представление от представления - чтобы не было внутри html или php кода вообще( чтобы было чтото одно из двух зол ) -> мне нужно думать в сторону шаблонизаторов или есть какая то альтернатива?

Нет не только альтернативы, нет вообще нормального решения.
и чего у тебя вид и представление разные вещи - это одно и тоже.
Не пытайся решать задачу пока путаешся в терминах и понятиях.
7. navitesting - 18 Марта, 2012 - 12:38:21 - перейти к сообщению
>caballero

Спасибо за мнение! А я так и написал "хоть вид и есть представление"
8. navitesting - 19 Марта, 2012 - 09:34:13 - перейти к сообщению
Скажите, пожалуйста, как поступить в таком случае:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT tale_id,date_c,date_e,title,SUBSTR(tale,1,100) tale,grade,user_id FROM table_name WHERE tale_id IN (SELECT tale_id FROM other_table_name WHERE tag_id=x ) AND visible=yes AND user_id=y


Всё равно в две модели писать?
9. DlTA - 19 Марта, 2012 - 09:54:05 - перейти к сообщению
запрос плохой, хостер вам за него сделает наганяй,
проблема в том что внутренняя выборка не имеет ключа, чем сильно напрягает ресурс
используйте JOIN
10. navitesting - 19 Марта, 2012 - 10:00:04 - перейти к сообщению
DlTA
Спасибо! Правда я пока про JOIN в общих чертах знаю.
А модели две сделать если будут ключи? Пожалуйста, если вам не трудно, приведите пример или скажите что почитать, чтобы двигаться в верном направлении?
11. DlTA - 19 Марта, 2012 - 10:32:12 - перейти к сообщению
может детальней расскажите что у вас там, а то абстрактными вещами кидаться...
12. navitesting - 19 Марта, 2012 - 10:39:40 - перейти к сообщению
DlTA

вот модель наследуемая от общего класса Model который в свою очередь от Db а та от Settings
Сейчас я реструктуризирую это дело потихоньку, дальше конечно всё будет не в конструкторе - но не суть.
Суть в том, чтобы сделать как лучше в плане разделения моделей, как вы рекомендовали:

PHP:
скопировать код в буфер обмена
  1. class GalTales extends Model{
  2.  
  3.         public function __construct( $page = 0, $tag = 0, $author = 0 ) {
  4.                 parent::__construct();
  5.                 $limit = 'LIMIT '.($page*$this->config->getValue('TALES_PER_PAGE')).', '.$this->config->getValue('TALES_PER_PAGE');
  6.  
  7.                 if( $tag === 0 && $author === 0 ) {
  8.  
  9.                         $query = 'SELECT tale_id,date_c,date_e,title,SUBSTR(tale,1,100) tale,grade,user_id FROM '.
  10.                         $this->table_name.' WHERE visible=\'yes\' LIMIT '.$this->config->getValue('TALES_PER_PAGE');
  11.  
  12.                 } else if( $tag !== 0 && $author !== 0 ) {  
  13.  
  14.                         // <-- вот с этим запросом проблемы
  15.                         $query = 'SELECT tale_id,date_c,date_e,title,SUBSTR(tale,1,100) tale,grade,user_id FROM '.
  16.                         $this->table_name.' WHERE tale_id IN (SELECT tale_id FROM GalTalesTags WHERE tag_id=\''.
  17.                         $tag.'\' ) AND visible=\'yes\' AND user_id='.$author.' '.$limit;
  18.  
  19.                 } else if( $tag !== 0 ) {
  20.  
  21.                         // <-- вот с этим запросом проблемы
  22.                         $query = 'SELECT tale_id,date_c,date_e,title,SUBSTR(tale,1,100) tale,grade,user_id FROM '.
  23.                         $this->table_name.' WHERE tale_id IN (SELECT tale_id FROM GalTalesTags WHERE tag_id= \''.
  24.                         $tag.'\' ) AND visible=\'yes\'  '.$limit;
  25.  
  26.                 } else if ( $author !== 0 ) {
  27.  
  28.                         // <-- вот с этим запросом проблемы
  29.                         $query = 'SELECT tale_id,date_c,date_e,title,SUBSTR(tale,1,100) tale,grade,user_id FROM '.
  30.                         $this->table_name.' WHERE user_id IN (SELECT id FROM GalUsers WHERE user_id=\''.
  31.                         $author.'\' ) AND visible=\'yes\'  '.$limit;
  32.  
  33.                 }
  34.  
  35.  
  36.         }
13. DlTA - 19 Марта, 2012 - 11:32:09 - перейти к сообщению
1) у разве есть в базе записи с id=0?
2) ни одного человеческого комента, если всмотреться то понятно что выборка отличается лиш тем есть или нет автора или тега, но с учетом отображения кода на форуме, тяжело это сообразить
3) этого кода не должно быть в конструкторе (вы это понимаете но на всякий случай)
4) ну а теперь то как это вижу я (это мое субъективное имно)
у вас должна быть модель Рассказы
у этой модели должны быть метода: получить рассказ, записать рассказ, изменить рассказ, ......; при редактировании происходит также редактирование сводной таблицы привязки к тегам, это можно объединить в эту же модель.
5) запросы. $this->table_name это может быть разные таблицы, какая?
(Добавление)
6) пользуйтесь довйными кавычками, существенно упрощает код
7) а можено пример таблиц в нагладном виде, а то у меня впечатление что существенная ошибка в архитектуре
14. navitesting - 19 Марта, 2012 - 11:48:00 - перейти к сообщению
5) $this->table_name - это текущая таблица - соответствующая названию класса. В классе Model от которого наследуется класс GalTales реализован небольшой метод который возвращает название наследуемого класса.

по поводу первого пункта не понял

вот таблицы:
15. caballero - 19 Марта, 2012 - 11:58:21 - перейти к сообщению
Цитата:
вот модель наследуемая от общего класса Model который в свою очередь от Db а та от Settings

а нахрена его наследовать от DB да с еще и от settings?

 

Powered by ExBB FM 1.0 RC1