当前位置: 首页 > 知识库问答 >
问题:

Laravel-Elloquint模型表关系

焦宏硕
2023-03-14

我正在学习拉威尔,有一件事我无法解决。

我有什么:

用户、帖子、评论及相应模型表

使用者php:

public function comments(){返回$this-

public function publishComment(Comment $comment)
    {
        $this->comments()->save($comment);
    }

邮递php:

public function comments(){返回$this-

Comment.php:

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

public function user() { return $this->belongsTo(User::class); } 

我想要什么?

因为我有博客,一个登录的用户可以创建许多帖子(这很有效)。但同一个登录用户可以在一篇文章中创建多条评论。(用户有很多评论,帖子有很多评论)。

桌子:

用户:|id|姓名|邮箱|密码

备注:| id |用户| id |发布| id |正文

帖子:| id |用户| id |标题|正文

我试过什么?我创建了控制器

评论控制器:

class CommentsController extends Controller

{

public function store(Post $post)
{

    $this->validate(request(), ['body' => 'required|min:2']);

    auth()->user()->publishComment(

        new Comment(request('body'));

    );

    return back();

}

在我的刀片文件中,我只需要$comment-

获取错误:尝试获取非对象的属性

<?php echo e($comment->user->name); ?>

任何帮助都将不胜感激。


共有3个答案

廉实
2023-03-14

如果您只需要创建注释的人的姓名,请尝试此操作。

{{ $post->user->name }}

程墨竹
2023-03-14

您可以简单地在view.blade.php中这样做:

// Here I am assuming you have a $post variable that contains your blog post.
<ul>
    @foreach ($post->comments as $comment)
      <li>{{ $comment->user->name }}</li>
    @endforeach
</ul>

这将循环你的博客文章的所有评论,并显示所有者的姓名,希望这会有所帮助。

臧友樵
2023-03-14

你需要一个多态关系。

表结构

posts
    id - integer
    title - string
    body - text
    user_id - integer

users
    id - integer
    name - string
    email - string
    password - string

comments
    id - integer
    body - text
    commentable_id - integer
    commentable_type - string

commentable\u id中保存用户id或帖子id
commentable\u类型中保存用户模型或Post模型
此外,您还可以使用注释表创建另一个表。

模型

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Comment extends Model
{
    /**
     * Get all of the owning commentable models.
     */
    public function commentable()
    {
        return $this->morphTo();
    }
}

class Post extends Model
{
    /**
     * Get all of the post's comments.
     */
    public function comments()
    {
        return $this->morphMany('App\Comment', 'commentable');
    }
}

class User extends Model
{
    /**
     * Get all of the users's comments.
     */
    public function comments()
    {
        return $this->morphMany('App\Comment', 'commentable');
    }
}

请参阅文档以获得更多详细信息。

在这个视频中,你有一个很好的解释https://youtu.be/lePjXdMC6aM

 类似资料:
  • 我正在尝试使用Laravel雄辩的模型查询多个表,这些模型具有一对一、一对多和多对多的关系。 我有一个表,一个表,一个表和一个透视表。 每个表单有一个品牌和一个用户: 品牌没有任何外键: 用户没有任何外键: 有一个数据透视表可以创建多对多的关系,用于创建拥有许多用户(如品牌成员)的品牌组: 我试图通过直接所有权()或品牌成员身份获取属于用户的所有表单,通过多对多透视表获取用户所属的所有品牌的所有表

  • 本文向大家介绍Laravel模型间关系设置分表的方法示例,包括了Laravel模型间关系设置分表的方法示例的使用技巧和注意事项,需要的朋友参考一下 Eloquent是什么 Eloquent 是一个 ORM,全称为 Object Relational Mapping,翻译为 “对象关系映射”(如果只把它当成 Database Abstraction Layer 数组库抽象层那就太小看它了)。所谓 “

  • 我使用的是Laravel作业批处理功能,我有一个仪表板,可以显示批处理的进度(已处理、失败、挂起的作业…等等)。 每个用户都有自己的仪表板,我想根据登录用户显示Batch的进度,但我看不到与批处理表的用户模型有任何关系。 是否有可能以某种方式与这些表建立关系?还有其他选择吗? 谢谢

  • 我有这种多对多的关系Laravel雄辩的关系模型是: 我可以在控制器中执行此操作: 在这里,我只通过直接枢轴关系获得email_subtype_id,但必须做额外的工作来获得相关的电子邮件子类型名称。 我需要获得电子邮件子类型名称[直接]从第三个模型电子邮件子类型关系oneTo很多[有很多和属性到]涉及到枢轴模型与电子邮件子类型模型使用类似的东西: 请帮忙!

  • 我有一个问题,我无法用文档解决。 我想在两个用户之间创建一个非常简单的对话系统。 我有3个模型和表: 用户id、名称 会话 id 消息 id,user_id,conversation_id,内容 因此,一条消息属于一个用户和一个对话,但我希望对话属于多个用户。 我不知道怎么用桌子做这个。如果我在对话表中创建一个字段,我不能有多个用户。。。

  • 模型(Model)之间存在各种各样的关系,如:一对一(One-To-One )、一对多(One-To-Many)等。模型间的关系本质上是对其代表的数据库中表之间的关系描述,通过这些关系可以实现数据库中表之间主/外键约束的创建。查询时也可以基于这些关系,生成在数据库中执行的连接查询或复合查询SQL语句。 关系/关联的使用 1.1 一对一(One-To-One)关联 1.2 一对多(One-To-Ma