2013-12-03 3 views
1

Это хорошая идея использовать модель yii с отношениями, когда у нас есть реляционные запросы, чтобы каждый раз?Использование моделей yii

Например у меня есть эти таблицы:

  • пользователя
  • Статья
  • ArticleVotes
  • Категория

пользователя связан со статьей и статьей голосов

статьи и статьи Голос связан

и категория и статьи связаны ...

так теперь, чтобы получить эти данные, я создал функцию, которая будет возвращать мне массив этих табличных данных, которые связаны

function getArticles($limit) 
{ 
    $criteria = new CDbCriteria(); 
    $criteria->limit = $limit; 
    $articles = Article::model()->with('idCategory', 'idUser', 'idArticleVotes')->findAll($criteria); 

    return array(
     'category' => $articles->idCategory, // object of type category 
     'articles' => $articles, //object of type article 
     'votes' => $articles->idArticleVotes, //object of type ArticleVotes which has other object of type users 
     'user' => $articles->idUser, //object of type user 
    ); 
} 

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

Будет ли медленным выполнение?

+0

Я заметил, что вы возвращаете фактические значения столбца таблицы «Статья», а не «объект типа», как с вашим кодом выше. Вы объявили отношения в своей модели статьи и определили ключи? – Hamad

+0

нет его не столбцы его отношения хорошо, я не копирую и вставляю, я просто написал этот код, я знаю, что он должен был быть idUser0 или idCategory0, как yii, сгенерировать его для вас ... – user2707590

+0

Избегайте загрузки нескольких отношений один-ко-многим в одном запрос. Это приводит к возврату * огромного количества строк. Посмотрите на [этот вопрос] (http://stackoverflow.com/questions/17133519/yii-eager-loading-fatal-error-out-of-memory/) для решения. – DCoder

ответ

0

EDIT: Если у вас есть более 20 статей или так на одной странице, то я бы определенно не создавать объекты для каждого атрибута статьи. Вот несколько советов и ответ, который я ранее писал связан:

  • Держите отношения, определенные в модели для случая, что у вас есть одну статью просмотровых окон или быстрые изменения манипуляции.

  • Вам нужно будет создать эффективный SQL-поиск и нажать его непосредственно с помощью команды Yii :: app() -> db-> ('sqlstatementhere'), чтобы вытащить информацию в пакете набора article_ids ,

  • Затем вы проанализируете свой результат (заданный в массиве) на своей странице.

  • Когда пользователь нажимает на статью, чтобы перейти к одной странице статей , вы можете использовать стандартные модели для получения информации.

Пожалуйста, обратитесь к принятому ответ здесь разъяснений по БД и Yii Using Database Features of Yii


Быстрый ответ: вполне нормально!

Ваша проблема не должна быть Yii, это должно быть ваша структура БД/время поиска.

  • Yii не изобретать колесо со связанными моделями: иначе он будет использовать article_id делать отдельные таблицы выглядят окна, так же, как вы бы без использования структуры ссылок.

  • Единственный раз, когда вы думаете о держаться подальше от ссылок вообще является в пакетном просмотровых окон и обновлений, где бы вы кормите в более прямых заявлений SQL для улучшения загрузки базы данных

У меня есть работал с Yii широко с веб-сайтов с более чем 200K просмотров страниц в день. С более чем 200 таблицами на БД для управления. Я расскажу вам, что использование базы данных DB для табличных отношений сделает ваш код благом для управления.

+0

Вы уверены, что его ОТЛИЧНО ОК ???? не будет ли медленным, когда я должен выполнить этот запрос? моя база данных не будет слишком перегружена? например, если я выполняю эту функцию в своем контроллере и перехожу к моему представлению getArticles(); // это займет ВСЕ статьи в моем db и вернет мне массив объектов , и если у меня будет 100 записей, чтобы получить? и, как правило, таблица пользователей - очень большая таблица повсюду. – user2707590

+0

вы абсолютно правы, почему-то я предполагал, что он искал 1 статью. Пожалуйста, просмотрите править выше. – Hamad

+0

это очень помогло мне ... я создал это только для извлечения данных из db ... поэтому я не буду использовать эти объекты для изменения db, просто получая их для отображения. и в моих таблицах я принимаю только другие таблицы, которые (BELONGS_TO), по-вашему, теперь я могу взять больше данных ??? – user2707590

Смежные вопросы