【问题标题】:How to take multiple values from one column in laravel如何从 laravel 的一列中获取多个值
【发布时间】:2018-06-21 06:32:04
【问题描述】:

好的,所以这个问题可能很广泛,但我会尽力解释。

基本上我有一个“标签”表和一个“帖子”表。当我使用 eloquent 时,我的帖子表有一个名为 tag_ig 的列。此列基本上会将标签表id 输入到帖子表tag_id 中。

我目前没有得到的是,如何获取数据? 假设这是我的代码:

$postsWithTags = Post::with(‘tags’)->get();

现在我可以在刀片中使用 foreach 并获取名为 tag_id 数据的列。但事情就是这样。如果我的tag_id 列有此数据(1、2、3、4),我如何获取该数据并显示实际的标签名称?

我有一个标签表和一个帖子表。我正在使用名为tag_id 的帖子表中的单个列来存储标签表中的多个标签ID(这是我刚才解释的摘要)。

有没有更好的方法来实现这一点?我需要创建一个单独的表吗?还是坚持这个?以及如何从一列中获取多个值,这些数据是这样的(1、2、3、4)并显示标签名称。

更新

表结构:

Tags
 |_ id
 |_ name
 |_ deleted_at
 |_ created_at
 |_ updated_at

Posts
 |_ id
 |_ tag_id
 |_ title
 |_ content
 |_ deleted_at
 |_ created_at
 |_ updated_at

【问题讨论】:

  • tags 表格行是什么样子的?你能发布你的表格结构吗?
  • @Tpojka 我已经添加了表格结构并更新了问题
  • 如前所述,当tag_idposts 表中时,每个帖子只能使用一个标签。您的帖子是否只有一个标签更好的方法是@Josh 的回答如下。

标签: json laravel eloquent


【解决方案1】:

您在这里拥有的是多对多关系。一个帖子可以有很多标签,一个标签可以属于很多帖子。您需要使用数据透视表打破这种关系。

post_tag |_ post_id |_ tag_id

然后在您的Post 对象上添加以下方法

function tags() {
    return $this->belongsToMany(Tag::class);
}

你现在可以做

$postsWithTags = Post::with(‘tags’)->get();

注意:您不再需要帖子表中的 tag_id 列。

以下是此次改动前后的关系

【讨论】:

  • 这是我一直在寻找的答案。制作中间表正确吗?但我很好奇。我可以在一列中取值(1、2、3、4)吗(也许使用 json?)
猜你喜欢
  • 2020-11-14
  • 1970-01-01
  • 2011-04-03
  • 2020-04-29
  • 1970-01-01
  • 2019-10-09
  • 1970-01-01
  • 2023-02-24
  • 2016-12-13
相关资源
最近更新 更多