首页 > 数据库 > mysql教程 > 如何使用 Eloquent 模型在 Laravel 中连接三个表?

如何使用 Eloquent 模型在 Laravel 中连接三个表?

Linda Hamilton
发布: 2024-11-13 03:44:01
原创
865 人浏览过

How to Join Three Tables in Laravel Using Eloquent Models?

使用 Laravel Eloquent 模型连接三个表

在 Laravel 中,使用 Eloquent ORM 可以方便地检索关系数据。考虑以下场景:

数据库表:

  • 文章:

    • id
    • 标题
    • 正文
    • categories_id
    • user_id
  • 类别:

    • id
    • category_name
  • 用户:

    • id
    • user_name
    • user_type

目标:

显示文章及其类别使用名称代替类别 ID,使用用户名代替用户 ID。

使用传统 SQL 查询:

这可以使用如下传统 SQL 查询来实现:

$articles = DB::table('articles')
                ->join('categories', 'articles.categories_id', '=', 'categories.id')
                ->join('users', 'users.id', '=', 'articles.user_id')
                ->select('articles.id', 'articles.title', 'articles.body', 'users.user_name', 'categories.category_name')
                ->get();
登录后复制

使用 Eloquent 模型:

但是,在 Laravel 中,使用 Eloquent 模型可以实现更简化的方法。首先,定义模型:

Article.php:

namespace App\Models;

use Eloquent;

class Article extends Eloquent
{
    protected $table = 'articles';

    public function user()
    {
        return $this->belongsTo('App\Models\User');
    }

    public function category()
    {
        return $this->belongsTo('App\Models\Category');
    }
}
登录后复制

Category.php:

namespace App\Models;

use Eloquent;

class Category extends Eloquent
{
    protected $table = "categories";

    public function articles()
    {
        return $this->hasMany('App\Models\Article');
    }
}
登录后复制

User.php:

namespace App\Models;

use Eloquent;

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

    public function articles()
    {
        return $this->hasMany('App\Models\Article');
    }
}
登录后复制

定义这些模型后,检索所需数据变得简单:

$article = \App\Models\Article::with(['user','category'])->first();
登录后复制

然后您可以按如下方式访问属性:

// Retrieve user name
$article->user->user_name

// Retrieve category name
$article->category->category_name
登录后复制

此外,您还可以按类别或用户检索文章:

$categories = \App\Models\Category::with('articles')->get();
$users = \App\Models\User::with('articles')->get();
登录后复制

更多详细信息,请参阅 Laravel 官方文档:http://laravel.com/ docs/5.0/eloquent

以上是如何使用 Eloquent 模型在 Laravel 中连接三个表?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板