laravel 关系模型如何通过帖子模型在评论模型中获取作者姓名

Posted

技术标签:

【中文标题】laravel 关系模型如何通过帖子模型在评论模型中获取作者姓名【英文标题】:laravel relation model how to get author's name in comment model through post model 【发布时间】:2016-08-04 07:50:57 【问题描述】:

我有一个关于 Laravel 的关系模型的问题

comment table        id post_id

post table           id author_id

author table         id name

我想使用关系模型通过post表在评论模型中获取作者姓名,如何实现。非常感谢。

【问题讨论】:

【参考方案1】:

您必须在帖子和用户之间创建 hasMany 关系。为此,您必须在模型中编写此关系函数:

后模型:

// A post can have 1 author
public function author() 
    return $this->belongsTo('App\User');

用户模型:

// A user can have multiple posts
public function posts() 
    return $this->hasMany('App\Post');

【讨论】:

【参考方案2】:

Laravel 中的关系非常容易实现,并且由于 API 的表达性而非常容易理解。所以在你的情况下,逻辑是这样的:

评论属于帖子帖子属于作者

所以考虑到您有 CommentPostAuthor 模型,每个模型都应该定义一个反映上述逻辑的关系方法。


Comment 模型如下所示:

class Comment extends Model

    public function post()
    
        return $this->belongsTo(Post::class);
    

Post 模型看起来像这样:

class Post extends Model

    public function author()
    
        return $this->belongsTo(Author::class);
    

然后您可以通过这些关系轻松访问帖子作者姓名:

Comment::find(1)->post->author->name;

从上面的代码中可以看出,为关系编写代码非常容易,因为方法名称确实具有暗示性。您可以在Laravel Documentation 中阅读有关 Eloquent 关系的更多信息。

【讨论】:

【参考方案3】:
class Post extends Model

    public function author()
    
        return $this->belongsTo(Author\class)->select('name');
    


Comment::with('author')->find(1);

in blade 

$comment->auther['name']

【讨论】:

答案需要适当的解释。 还有拼写错误和至少一个明显的拼写错误。【参考方案4】:

这是我使用 Laravel 8 和 belongsTo 的答案。

在我的解决方案中,我首先创建了用户和帖子的关系

 // Post migration

public function up()
    
        Schema::create('posts', function (Blueprint $table) 
            $table->id(); 
            $table->unsignedBigInteger('user_id'); 
      
            $table->string('title',160)->unique();
            $table->string('image');
            $table->text('content')->nullable();
            $table->timestamps();
            
            $table->foreign('user_id')
            ->references('id')
            ->on('users')
            ->onDelete('cascade');

        );
    

在 My Post 模型中,我创建了 authors 函数

// Post Model
public function authors()
     
         return $this->belongsTo(User::class, 'user_id','id');
     

'user_id' 是 foreignKey,id 是 ownerKey

现在我使用这个在我的控制器中调用 Post 模型

//Post Controller

  //return latest posts with the author and paginate it
    public function index()
    
        $posts = Post::latest()->with('authors')->paginate(3);

        return view('blog',compact('posts'));

    

最后,我在 blog.blade 文件中使用它

//blog.blade
<hr>
@foreach ($posts as $post)

    <h3>$post->title</h3><pre>$post->role</pre> 
    //get author name forech post
    <pre>$post->authors['name']</pre>
@endforeach
<hr>

【讨论】:

以上是关于laravel 关系模型如何通过帖子模型在评论模型中获取作者姓名的主要内容,如果未能解决你的问题,请参考以下文章

通过 laravel 中的关系进行咨询

laravel 观察器 模型绑定 方法的关系

Laravel 模型必须返回一个关系实例

在 laravel 中安装新软件包后,如何向模型添加新关系 [关闭]

带有嵌套关系的 Laravel 急切加载

Laravel:模型中的动态关系