【问题标题】:laravel model relationship 5.5laravel 模型关系 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查询关系怎么做

【问题讨论】:

    标签: laravel laravel-5.5


    【解决方案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 因为我会使用模态关系所以我不会使用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-27
    • 2018-04-18
    • 1970-01-01
    • 2018-03-01
    • 2018-03-07
    • 1970-01-01
    相关资源
    最近更新 更多