前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >3分钟短文 | Laravel如何改造复杂的多表联合查询,这很高效!

3分钟短文 | Laravel如何改造复杂的多表联合查询,这很高效!

作者头像
程序员小助手
发布2020-08-14 11:14:10
1.1K0
发布2020-08-14 11:14:10
举报
文章被收录于专栏:程序员小助手

引言

今天我们来说一下laravel框架里最常用的数据库模型操作,特别是功能复杂的应用程序, 往往会拆分出许多的业务表,关联表,在时间和空间上进行权衡。

那么今天的问题是,如何关联3张表进行操作?

学习时间

假设现在有3张表,分别是 articles 文章表,category 分类表,还要一个是 users 用户表。关联度最深的还数 articles,因为它要存储该文章的分类,还有发布者。字段如下:

代码语言:javascript
复制
 id
 title
 body
 categories_id
 user_id

为了说明问题,我们精简了表结构。接着是 分类表 category 的字段:

代码语言:javascript
复制
  id
  category_name

最后是发布者 users 表字段:

代码语言:javascript
复制
 id
 user_name
 user_type

好了准备工作做完了。假设要查询一篇文章,且需要连带查询出该文章的分类信息,发布者信息,最直观的是使用 join 关联查询。类似下面的代码方式:

代码语言:javascript
复制
$articles =DB::table('articles')
    ->join('categories', 'articles.id', '=', 'categories.id')
    ->join('users', 'users.id', '=', 'articles.user_id')
    ->select('articles.id','articles.title','articles.body','users.username', 'category.name')
    ->get();

但是这样写组装的SQL语句太复杂了。而且一点也不laravel。所以我们尝试着使用laravel eloquent orm 方式实现。

首先是创建表对应的模型 User.php,

代码语言:javascript
复制
<?php

namespace App\Model;

use Lib\Database\Model;
use App\Model\User;
use App\Model\Category;

class Article extends Model{

    protected $table = 'articles';

    public function user()
    {
        return $this->belongsTo(User::class, 'user_id', 'id');
    }

    public function category()
    {
        return $this->belongsTo(Category::class, 'category_id', 'id');
    }

}

再接着是 User 用户模型:

代码语言:javascript
复制
<?php

namespace App\Model;

use Lib\Database\Model;
use App\Model\Article;

class User extends Model
{
    protected $table = 'users';

    public function articles()
    {
        return $this->hasMany(Article::class, 'user_id', 'id');
    }

}

最后是分类 Category 模型:

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-08-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员小助手 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 引言
  • 学习时间
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档