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

雄辩注入多个模型关系

万俟宜修
2023-03-14

因此,我在JeffreyWay的屏幕广播中了解到,我可以使用Eloquent从注入到另一个模型的模型中获取相关id。

我正在关注他关于Laravel 5.4的系列报道。

在这里,我有一个用户到帖子的一对多关系。

应用程序/帖子

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

在我的用户模型中,我有一个发布方法,其中注入了发布模型。发布方法用于创建进入数据库的发布条目。

应用/用户

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

public function publish(Post $post)
{
    $this->posts()->save($post);
}

然后,我在PostsController中有一个存储方法,它在我的用户模型中调用发布方法。

后置控制器

class PostsController extends Controller
{
     public function __construct()
    {
        $this->middleware('auth')->except(['index', 'show']);
    }

    public function store()
    {
        auth()->user()->publish(
           new Post(request(['title', 'body']))
        );
    }
}

调用publish方法时,注入的Post类会自动将用户id设置为save方法。

我的问题是,在每个帖子都有评论的情况下,我如何建立这样的关系。这些注释与帖子和创建注释的用户相关联。

简而言之,当我调用addComment方法时,我应该user_id和post_id。

共有2个答案

钮善
2023-03-14

你在问题中写道:

简而言之,当我调用addComment方法时,我应该user_id和post_id。

这是绝对正确的,没有问题。你不必通过像$user-这样的方法来设置这些属性

事实上,以下三种创建新职位的方法是可以互换的:

// what you did
$user->posts->save(
    new Post([
        'title' => 'Hello', 
        'body' => 'World!',
    ])
);

// equivalent
Post::create([
    'user_id' => \Auth::user()->id, // or \Auth::id()
    'title' => 'Hello',
    'body' => 'World!',
]);

// also equivalent
$post = new Post([
    'user_id' => \Auth::user()->id, // or \Auth::id()
    'title' => 'Hello',
    'body' => 'World!',
]);
$post->save();

存储新评论时,您很可能会有这样一个控制器,因为评论始终属于帖子,因此您需要帖子的引用:

class CommentsController extends Controller
{
    public function __construct()
    {
        $this->middleware('auth')->except(['index', 'show']);
    }

    public function store(Post $post)
    {
        $comment = new Comment(request(['body']));
        $comment->user_id = \Auth::user()->id;
        $comment->post_id = $post->id;
        $comment->save();
    }
}

你也可以缩写它并写:

Comment::create(
    array_merge(request(['body']), ['user_id' => \Auth::id(), 'post_id' => $post->id])
);

嵇俊德
2023-03-14

用户模型:

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

public function comments(){
  return $this->hasMany(Comments::class);
}

职位模型

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

public function comments(){
  return $this->hasMany(Comments::class);
}

评论模型

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

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

示例问题:

1)获取用户评论:

解决方案:auth()-

2)从给定的评论获取用户:

解决方案:评论::find($some CommentId)-

3) 获取特定帖子的所有评论。

解决方案:Post::first()-

4) 加载注释时加载用户:

解决方案:评论::('user')-

5) 同时加载该帖子的特定用户帖子和评论:

解决方案:用户::('posts.comments')-

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

  • 我有一个无法解决的问题。我有一个包含TitleID、TextID、ImageID的新闻表。还有三张表格,标题,文本,图片。我想把它们都放在一个模型里。但当我尝试时,得到的结果就像数组中的数组。但我想要的是: 雄辩的ORM对此的反应如下: 数据库结构 新闻= 头衔= 其他表类似于标题表。

  • 简介: 我有这些表与他们的模型: 地址表-- 规则: 每个用户只能有一个地址 这里可以进行两种可能的关系规划: > 用户有一个地址和地址属性To User[即一对一关系],但缺点是外键位于地址表中,即user_id字段,通过与其他模型[公司和财产]重复相同的关系,我们将获得地址表中的另外两个外键是[company_id和property_id],那么我们将最终得到3个外键用于3个型号,但每行记录只

  • 我将有一个充满涉及其他表(关系)的信息的表。此表中的大多数信息将只有引用相关表的ID。如果我使用“产品”作为此表的示例,对于某些列来说可能是这样的: 我想把这个“产品”表倒出到一个列表中。当我将其转储(关系)时,我需要查找这些列中的所有项。我知道如何做物品和物品,但是我不确定如果我有一个“产品”模型,我怎么能用雄辩的模型一次性做到这一点?我应该让产品表只是一个数据透视表吗?我可以用雄辩的模型做它,

  • 我的结构如下: 3张表格:电影、演员、类型 电影表模式: 类型表架构: 演员表架构: 电影模组: 体裁模态: 演员模式: 表格: 我使用以下控制器方法从表单发布数据,一切正常,但当我提交2部电影具有相同的流派,例如“动作/戏剧”,我在流派表中得到2个单独的条目,如: id:1名称:动作/戏剧 ID: 2名称:动作/戏剧 对于一个特定的流派类型,反复使用单个id的最佳方法是什么?例如,如果我添加了1

  • 我有一个表事务与复合主键id,Nom,日期和一个表Cour与Nom作为主键和一个事务有关一个Cour。 我怎样才能得到一个有口才关系的特定交易的课程?