laravel 模型关系 5.5

Posted

技术标签:

【中文标题】laravel 模型关系 5.5【英文标题】:laravel model relationship 5.5 【发布时间】:2018-07-11 07:59:44 【问题描述】:

1.用户 1. 身份证 2.名字

2。类别 1. 身份证 2. 类别名称 3.user_id

3。帖子 1. 身份证 2. post_title 3. category_id

所以现在我想在我的视图中显示数据 比如:post_title->category_name->user_name

模型中的laravel查询关系怎么做

【问题讨论】:

【参考方案1】:

定义关系

class Post extends Model

    return $this->blongsTo(Category::class);


class Category extends Model

    return $this->blongsTo(User::class);

现在

$post = with('category.user')->whereId(1)->first(); //1 is my guess

$post->category()->user->name();

虽然您可以像这样访问用户的帖子,但它似乎也是has-many-through 关系

$user->posts;

为此,您需要定义:

class User extends Model

/**
 * Get all of the posts for the user.
 */
public function posts()

    return $this->hasManyThrough(Post:class, Category::class);


【讨论】:

@Md Majadul Islam 检查答案 很好的查询@Mahdi Younesi 但我想显示我的结果$post = Post::with(............)->get->(); So now result is post_title, category_name, user_name ? @Md Majadul Islam 我编辑了问题,使用 eager loading $post->category->name ` 或 $post->category->user->name randomId 是 laravel 的默认函数? 或者你可以通过 slug 或标题找到$post = with('category.user')->whereSlug('some-slug')->first(); 【参考方案2】:
$Query=DB::select('select posts.post_title,categories.category_name,
users.name from posts,categories,users where users.id=categories.user_id and
categories.id=posts.category_id');

如果你不使用 DB:: 你可以使用你的模型

$Query = Users::select('users.name', 'posts.post_title', 'categories.category_name')
        ->join('categories', function ($join) 
             $join->on('categories.user_id', '=', 'users.id')
                  ->join('categories.id', '=', 'posts.category_id');
    )
        ->get();

检查拼写表名和列 但是如果数据中有重复,它将无法正常工作

【讨论】:

谢谢@Ahmed Shams,但我不使用DB 为什么只使用 Illuminate\Support\Facades\DB; 其实我不想使用 DB 因为我会使用模态关系所以我不会使用

以上是关于laravel 模型关系 5.5的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Laravel 5.5 中实现多个多对多关系?

无法使用 laravel 5.5 建立 laravel 关系

Laravel 5.5 模型上的自定义软删除

Laravel 5.5 检索嵌套关系中的第一条记录

Laravel 5.5 路由中的模型绑定不起作用

Laravel 5.5如何获得与模型相关的所有模型?