laravel 5.8中的归属关系

时间:2019-09-20 11:35:55

标签: php laravel eloquent

我想在帖子和用户之间建立一种关系,以便能够通过$ user-> posts()获取所有帖子,并通过$ post-> user()获取用户

我设置了belongsTo函数,但是我需要一种方法,以便当我获得用户时,可以以某种方式找到他的所有帖子 同样当我收到我使用\ App \ Post :: find(1)-> user()-> name的帖子时,它什么也不返回

帖子模型

class Post extends Model
{
    public function user() {
        return $this->belongsTo('App\User',null,'userid');
    }
}

后数据库结构

Schema::create('posts', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('title');
            $table->longText('body');
            $table->string('thumbnail');
            $table->integer('views');
            $table->integer('likes');
            $table->bigInteger('userid');
            $table->integer('categoryid');
            $table->timestamps();
        });

除了laravel默认值外,用户模型什么都没有,因为用户没有引用帖子的列

用户数据库结构为Laravel默认值

Foreach代码:

@foreach(\App\Post::find(4)->user() as $user)
            <p>{{$user->name}}</p>
@endforeach

我希望它能获得用户名,但是没有。

2 个答案:

答案 0 :(得分:1)

使用hasMany关系。

在用户模型内:

public function posts()
{
    return $this->hasMany(Post::class, 'userid', 'id');
}

现在,您可以获取所有用户帖子:

$posts = User::find($someId)->posts()->get();
//or
$posts = User::find($someId)->posts;

关于has many relationship

的文档

希望有帮助。

答案 1 :(得分:0)

在用户模型中

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use App\User;

class Post extends Model
{
    /**
     * Get the comments for the blog post.
     */
    public function user()
    {
        return $this->belongsTo('App\User');
    }
}

在用户模型中

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use App\Post;

class User extends Model
{
    /**
     * Get the posts for the user.
     */
    public function comments()
    {
        return $this->hasMany('App\Post');
    }
}

现在您可以以App\User::find(id)->posts的身份访问用户的帖子