当前位置: 首页 > 面试题库 >

如何通过Laravel雄辩的模型加入三张桌子

司空祯
2023-03-14
问题内容

我有三张桌子

物品表

 id
 title
 body
 categories_id
 user_id

分类表

  id
  category_name

用户表

 id
 user_name
 user_type

我想显示其类别名称而不是category_id和user_name而不是user_id的文章,我尝试像这些查询一样工作!

$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();

但是我想用口才来做。拜托,我该怎么办?


问题答案:

使用Eloquent,它非常容易检索关系数据。在Laravel 5中使用您的场景检查以下示例。

我们有三种模型:

1)文章(属于用户和类别)

2)类别(有很多文章)

3)用户(有很多文章)

1)Article.php

<?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');
    }

}

2)Category.php

<?php

namespace App\Models;

use Eloquent;

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

    public function articles()
    {
        return $this->hasMany('App\Models\Article');
    }

}

3)User.php

<?php

namespace App\Models;
use Eloquent;

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

    public function articles()
    {
        return $this->hasMany('App\Models\Article');
    }

}

您需要了解数据库关系和模型中的设置。用户有很多文章。类别有很多文章。文章属于用户和类别。一旦在Laravel中设置了关系,就可以轻松检索相关信息。

例如,如果要使用用户和类别检索文章,则需要编写:

$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\Category::with('users')->get();

您可以在http://laravel.com/docs/5.0/eloquent了解更多



 类似资料:
  • 问题内容: 我正在尝试检索两组信息(一个查询中该图的红色和蓝色部分)。 我以为我可以使用下面所述的sql来做到这一点,但是当TableC没有记录时,它什么也不会返回。如果TableC没有记录,我仍然希望该查询向我返回BLUE区域指示的结果。 从表A中选择A. * 加入TableB B ON(A.id = B.a_id) 联接表C C ON(A.id = C.a_id) 感谢任何指针,以向我返回红色

  • 我有以下三种型号: 类别字段: 分类选项: 当我运行这个查询时,我得到了这个错误: SQLSTATE[42S22]:列未找到: 1054未知列'field ID'在'where子句'(SQL:选择*从其中=3)任何帮助请知道是什么问题!!?

  • 我希望避免一直使用表名,而使用别名。

  • 我试图通过使用Laravel Eloquent获得数据,但我无法访问。无论何时尝试,它都显示尝试获取非对象的属性“name” 我有两个模型。类别和文章。类别有许多文章。以下是模型: 类别模型 文章模式 物品管理员 查看刀片(admin.article.pending) 在这里的刀片,我不能访问类别通过雄辩的属于功能,我没有得到背后的原因得到的消息: ErrorException(E_ERROR)试

  • 我将有一个充满涉及其他表(关系)的信息的表。此表中的大多数信息将只有引用相关表的ID。如果我使用“产品”作为此表的示例,对于某些列来说可能是这样的: 我想把这个“产品”表倒出到一个列表中。当我将其转储(关系)时,我需要查找这些列中的所有项。我知道如何做物品和物品,但是我不确定如果我有一个“产品”模型,我怎么能用雄辩的模型一次性做到这一点?我应该让产品表只是一个数据透视表吗?我可以用雄辩的模型做它,

  • 我在使用laravel雄辩的ORM时遇到了一个问题。 基本上,我正在获取与用户相关的帖子,以及他的评论,但是,我正在尝试集成某种分页(我一次只想取5个帖子)。 而使用跳过方法,我总是得到以下laravel错误: 方法skip不存在。 这是我实际使用的代码片段。 有人能给我任何帮助吗? 帐户模型检索与用户相关的帖子模型(关系),但是,我想一次只收到5个帖子,用于基于ajax的请求。