资讯专栏INFORMATION COLUMN

Yii 多表关联

warnerwu / 2385人阅读

摘要:在里面对数据库操作有一个很方便的功能就是多表关联,通过在里面指定对某个表的关联,这样就可以很快得到相关信息而不需要自己去写复杂的语句。

在 Yii 里面对数据库操作有一个很方便的功能就是多表关联,通过在 model 里面指定对某个表的关联,这样就可以很快得到相关信息而不需要自己去写复杂的 sql 语句。

下面我们拿 user 表和 news 表举例。(一个用户发表了多篇文章)
首先,我们需要在我们需要的 model 里面的配置 relation
User Model:

public function relations()
{
  return array(
     "news" => array(self::HAS_MANY, "News", "uid", "order"=>"nid DESC"),
  );
}

news 表中我们有一个 uid 字段对应着 user 表的 primary keyuid),因为 uiduser 表的索引,所以这里只用指定 news 表中的字段即可。

当我们需要指定其他的字段时可以这样写:

"news" => array(self::HAS_MANY, "News", array("uid"=>"user_id") ),
//这样就是news 表中字段uid与user表中user_id对应

我们执行如下的代码看效果:

$user = User::app()->model()->fingByPk( $uid );
printr( $user );

在我们取出的 $user 中就会存在 news 的信息:

$allnews  = $user->news;
foreach( $allnews as $new ) {
    printr( $new );
}

这样我们就完成了简单的两个表之间的关联。在上面的例子中我们会看到 self::HAS_MANY 这个东西,在 Yii 里面还有其他的几种关系:

HAS_ONE            // 一对一
HAS_MANY           // 一对多
BELONGS_TO         // 多对一
MANY_TO_MANY       // 多对多

News Model 中我们也可以指定那样一个 relation:
News Model

public function relations()
{
  return array(
     "user" => array(self::BELONGS_TO, "User", "uid"),
  );
}

在我们取出的 news 中每一条都会附带上 User 的数据,方便操作。

$allnews  = News::app()->model()->findAll();
foreach( $allnews as $new ) {
    printr( $new->user );
}

其他的两种情况就不演示了,同样的道理。
在上面的例子中我们会看到前一个有一个 order 参数,而第二个没有。这个很好理解,就相当于我们 sql 语句中的条件。常见的条件有:

condition order with joinType select params on alias together group having index

还有用于lazy loading 的:

limit        // 只取5个或10个 
offset 
through 

官方手册:

"posts"=>array(self::HAS_MANY, "post", "author_id", "order"=>"posts.create_time DESC", "with"=>"categories")

详细的语法可以去看官方文档。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/20967.html

相关文章

  • yii2 ActiveRecord多表关联以及多表关联搜索的实现

    摘要:今天把这个问题讲明白了,看看是怎么个多表关联以及如何去优化这个关联。现需要在列表展示表的来源渠道,且该渠道可搜索。关联表字段增加查询中的搜索模型也是通过实现的,该模型通过控制着哪个字段可搜索,哪个字段不可搜索。 作者:白狼 出处:http://www.manks.top/yii2_many_ar_relation_search.html 本文版权归作者,欢迎转载,但未经作者同意必须保留...

    venmos 评论0 收藏0
  • Yii2中hasOne、hasMany以及多对多关联查询的用法

    摘要:前言是特有的用于多表关联查询的函数,平时在使用多表关联查询的时候建议使用它们。需求分析使用一条查询语句就能把列表的数据全部展现出来,列表包含一对一,一对多,以及多对多的关系。不能破坏自有的表头排序功能,以及中的存值。相关资料中多表关联查询 前言 hasOne、hasMany是Yii2特有的用于多表关联查询的函数,平时在使用多表关联查询的时候建议使用它们。为什么?因为这种方式关联查询出来...

    qc1iu 评论0 收藏0
  • Yii2中hasOne、hasMany以及多对多关联查询的用法

    摘要:前言是特有的用于多表关联查询的函数,平时在使用多表关联查询的时候建议使用它们。需求分析使用一条查询语句就能把列表的数据全部展现出来,列表包含一对一,一对多,以及多对多的关系。不能破坏自有的表头排序功能,以及中的存值。相关资料中多表关联查询 前言 hasOne、hasMany是Yii2特有的用于多表关联查询的函数,平时在使用多表关联查询的时候建议使用它们。为什么?因为这种方式关联查询出来...

    lmxdawn 评论0 收藏0
  • Yii2中hasOne、hasMany以及多对多关联查询的用法

    摘要:前言是特有的用于多表关联查询的函数,平时在使用多表关联查询的时候建议使用它们。需求分析使用一条查询语句就能把列表的数据全部展现出来,列表包含一对一,一对多,以及多对多的关系。不能破坏自有的表头排序功能,以及中的存值。相关资料中多表关联查询 前言 hasOne、hasMany是Yii2特有的用于多表关联查询的函数,平时在使用多表关联查询的时候建议使用它们。为什么?因为这种方式关联查询出来...

    BDEEFE 评论0 收藏0
  • YII2中多表关联的使用

    摘要:第二个参数是一个数组,其中键为所关联的模型中的属性,值为当前模型中的属性。这里注意中的第二个是指关联的中的,第一个是指中的。 首先先来说明一下表结构 表结构 现在有订单表、用户表、商品清单表、商品库存表 showImg(https://segmentfault.com/img/bVRcME?w=833&h=244); showImg(https://segmentfault.com/i...

    vslam 评论0 收藏0

发表评论

0条评论

warnerwu

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<