【问题标题】:The use of yii modelsyii模型的使用
【发布时间】:2013-12-03 06:46:22
【问题描述】:

当我们每次都要进行关系查询时,将 yii 模型与关系一起使用是个好主意吗??

例如我有这些表:

  • 用户
  • 文章
  • 文章投票
  • 类别

用户链接到文章和文章投票

文章和文章投票是相关联的

并且类别和文章是链接的...

所以现在为了获取这些数据,我创建了一个函数,它将返回一个包含这些相关表数据的数组

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 的好方法吗?特别是如果我有很多数据要从数据库中检索???

执行会不会很慢???

【问题讨论】:

  • 我注意到您返回的是表“文章”的实际列值,而不是与上面的代码一样的“类型对象”。您是否在 Article 模型中声明了关系并定义了键?
  • 不,它不是列,它的关系很好 iuts 不是复制和粘贴我刚刚写了这段代码,我知道它应该是 idUser0 或 idCategory0 像 yii 为你生成它...
  • 避免在一个查询中加载多个一对多关系。这样做会导致返回 大量 行。查看this question 的解决方案。

标签: php yii model


【解决方案1】:

编辑: 如果每页有超过 20 篇左右的文章,那么我绝对不会为文章的每个属性创建对象。以下是一些提示,我之前写的答案已链接:

  • 保留模型中定义的关系 单篇文章查找或快速操作编辑。

  • 您将需要创建一个高效的 SQL 查找并直接使用 Yii::app()->db->command('sqlstatementhere') 推送它,以提取一组信息article_ids。

  • 然后您会将结果(以数组形式给出)解析到您的页面。

  • 当用户点击文章进入单篇文章页面时,您可以使用标准模型检索信息。

有关 DB 和 Yii 的说明,请参阅此处接受的答案 Using Database Features of Yii


快速回答:完全可以!

你关心的不应该是 Yii,应该是你的 DB 结构/查找时间。

  • Yii 不会重新发明带有链接模型的轮子:也就是它将使用 article_id 进行单独的表查找,就像你做的那样 不使用链接结构。

  • 您唯一考虑完全远离链接的情况是 在批量查找和更新中,您可以更直接地输入 提高数据库负载的 SQL 语句

我曾与 Yii 广泛合作过每天浏览量超过 200K 的网站。每个数据库有超过 200 个表要管理。我会告诉你,利用数据库框架来处理表关系将使你的代码易于管理。

【讨论】:

  • 你确定它完全没问题????当我必须执行这个查询时会不会很慢?我的数据库会不会太过载?例如,如果我在控制器中执行此函数并传递给我的视图 getArticles(); //这将获取我数据库中的所有文章并返回对象数组,如果我有 100 条记录要获取???通常用户表在任何地方都是一个非常大的表。
  • 你说得对,出于某种原因,我认为它正在查找 1 篇文章。请看上面的编辑。
  • 这对我帮助很大...我创建它只是为了从 db 中检索数据...所以我不会使用这些对象来修改 db 只是检索它们以显示。在我的表中,我只使用其他表(BELONGS_TO)你认为我现在可以获取更多数据???
  • 当然,使用 db 命令检索数据是数据库交互的最低形式,结果是一个 PHP 数组。以最低内存使用率提取数据的最有效方法。如果我有帮助,请采纳答案,非常感谢!
  • 是的,这确实帮助了我很多。我在上一条评论中的意思是针对我当前使用的方法...如果我要检索许多记录但关系只有 (BELONGS_TO) 会很慢吗?我公司的人反对 cdbcommand,我们可以使用 cdbcriteria 和模型
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多