Yii Framework Forum: Вопрос по AR - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Вопрос по AR Rate Topic: -----

#1 User is offline   Digital God 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 178
  • Joined: 30-January 09

Posted 17 March 2009 - 05:27 AM

Есть две таблицы - news и category. Связка многие ко многим через таблицу newscategory.

Какиб образом можно сделать запись в newscategory при добавлении новости?
Только вручную или можно обратится к модели news и что-то с ней сделать? :)
0

#2 User is offline   Sergey Kuznetsov 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 93
  • Joined: 16-February 09
  • Location:Russia, Saratov

Posted 18 March 2009 - 06:44 AM

Скорее всего тебе нужно сделать в модели News следующий код:


protected function beforeSave()
{
foreach ($this->categories as $name) // или как у Вас получается список категорий, куда попадает новость
{
if (Category::model()->findByAttributes(array('name'=>$name) === null)
{
$category=new Category(array('name'=>$name));
$category->save();
}
$this->dbConnection->createCommand("INSERT INTO newscategory (newsId, categoryId) VALUES ({$this->id},{$category->id})")->execute();
}
}


Примерно так...
0

#3 User is offline   Digital God 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 178
  • Joined: 30-January 09

Posted 19 March 2009 - 02:16 AM

Я в итоге так и сделал, только не стал это в модель выносить, а просто в action добавил нечто похожее на
$this->dbConnection->createCommand("INSERT INTO newscategory (newsId, categoryId) VALUES ({$this->id},{$category->id})")->execute();

0

#4 User is offline   Sergey Kuznetsov 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 93
  • Joined: 16-February 09
  • Location:Russia, Saratov

Posted 19 March 2009 - 04:04 AM

Ну, на вкус и цвет - все фломастеры разные...
Но мне один товарищ сказал как-то, когда я только узнавал про MVC, что это такая примерно вещь:

  Всё, что отвечает за отображение данных - пихай во вью;
  Всё, что отвечает за данные - пихай в модель;
  А контроллер - так... он получает, передает, получает, передает...

Работа с БД должна в идеале быть только внутри модели.
0

#5 User is offline   Digital God 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 178
  • Joined: 30-January 09

Posted 19 March 2009 - 07:05 AM

Хмм... если следовать таким правилам - то куда мне пихать выборку из базы?
имеется ввиду код вида

        $criteria=new CDbCriteria;
        $criteria->select='altname, title, createDate, metaKeywords, viewsCnt, commentsCnt, short';
$criteria->condition='news.published='.News::STATUS_PUBLISHED;
$criteria->condition.=' and news.openDate <= UNIX_TIMESTAMP()';
$criteria->condition.=' and news.blogId = 1';
$criteria->order='news.createDate DESC';

        $posts=News::model()->with(array('author'=>array(
                                            'select'=>'username,displayname'
                                      ),
                                      'category'=>array(
                                            'select'=>'name, altname',
                                            'condition'=>'??.blogId = 1 and ??.visible = 1'
                                      )
                                ))->together()->findAll($criteria);


это наврно все-таки в контролере оставить надо :)
0

#6 User is offline   Sergey Kuznetsov 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 93
  • Joined: 16-February 09
  • Location:Russia, Saratov

Posted 19 March 2009 - 08:34 AM

Ну, спорить можно долго. Главное не начинать - "какой фремворк нам настоящий MVC даёт?!"...

Но в Вашем случае, вы же не выборку из БД делаете, а критерий выборки, а вот критерий выборки как раз и нужно делать в контроллере - он решает какие данные ему нужно выбрать из модели, чтобы передать их в представление.

Контроллер - логика приложения. Он как "разводящий" в узких кругах  :D.
0

#7 User is offline   Digital God 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 178
  • Joined: 30-January 09

Posted 20 March 2009 - 01:14 AM

Не, спорить я не собираюсь )) Yii один из лучших вариантом MVC :)
0

#8 User is offline   carat 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 60
  • Joined: 12-February 09

Posted 20 March 2009 - 05:42 AM

Quote

Хмм... если следовать таким правилам - то куда мне пихать выборку из базы?

лично я в папке моделей создаю файл, допустим - NewsADO.php,
где и собраны в кучу все select SQL-запросы (см. скриншот), а в
контроллере пишется так:
[tt]    public function actionTable()
    {
        $this->render('table',array('rows'=>NewsADO::getTable()));
    }
[/tt]
если есть необходимость использовать все преимущества модели, то
класс NewsADO может быть потомком модели News

Quote

Контроллер - логика приложения. Он как "разводящий" в узких кругах

правильно контроллер - это диспетчер. за исключением тех моментов,
когда надо делать в модели insert, update, delete.
[tt]    public function actionDelete()
    {
        News::model()->deleteByPk($_GET['id']);
        $this->redirect(array('table'));
    }[/tt]

от себя добавлю, если у вас в контроллере замечательная "читабельность"
кода, то вы поняли назначение MVC. поздравляю!

Attached File(s)


0

#9 User is offline   Digital God 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 178
  • Joined: 30-January 09

Posted 26 March 2009 - 02:17 AM

Мне кажется все-таки выборку данных надо оставить за контроллером, а в модели прописывать пре и пост обработку данных
0

#10 User is offline   carat 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 60
  • Joined: 12-February 09

Posted 26 March 2009 - 04:40 AM

своя рука - владыка!
а теперь представь, что в проэкте тебе надо эдак разика 3
в разных контроллерах использовать одину и ту же выборку
из базы.
0

#11 User is offline   xomaa 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 82
  • Joined: 17-January 09

Posted 26 March 2009 - 10:46 AM

Quote

своя рука - владыка!

а теперь представь, что в проэкте тебе надо эдак разика 3

в разных контроллерах использовать одину и ту же выборку

из базы.

согласен - потому делаю методы в модели....
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users