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

Laravel插入到三向数据透视表中

金嘉言
2023-03-14

我正在建立一个音乐发现服务。我的问题是:如何将数据插入到三方数据透视表Tag_Track_User?

我在LaravelSD看到了这个模式

它包括六个主要表(和其他几个):艺术家,专辑,曲目,标签,用户和Tag_Track_User

艺术家们

标签、轨迹和用户都是相互关联的,因为没有第三个,任何两个都不可能存在。

艺术家有许多()专辑

专辑有许多歌曲,属于艺术家

曲目belongsTo()相册

跟踪的属性的标签和属性的用户

标签属性到许多()轨道和属性到许多()一个用户

用户belongToMany()标记和belongToMany()跟踪

用户模型

public function tags()
{
    return $this->belongsToMany('Tag', 'tag_track_user', 'user_mdbid', 'tag_mdbid')->withPivot('track_mdbid');
}

/**
 * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany
 */
public function tracks()
{
    return $this->belongsToMany('Track', 'tag_track_user', 'user_mdbid', 'track_mdbid')->withPivot('tag_mdbid');
}

标记和轨迹模型包含相同的各自关系。

所以我的问题是:

如何将数据插入Tag_Track_User表?tag_track_user表是一个三向数据透视表,包含有关用户标记的轨迹的信息。

您必须登录才能标记音轨(这意味着我可以访问用户的ID)。当我在包含表单的页面上显示时,将访问轨道ID。另一方面,标签;如果它已经存在于标签表中,我想获取它的ID并重新使用它(因为它们是唯一的),如果没有,我想创建它,为它分配一个ID并将其插入tag_track_user_table。

  1. 我需要检查标签是否存在

我在这方面得到的任何帮助,都非常感谢。

共有2个答案

墨阳羽
2023-03-14

由于在Laravel中似乎没有合适的模式,因此更简洁、更简单的方法是通过一个专用于透视表的模型实现任意三种透视关系:

class Track
public function trackTags()
{
    return $this->hasMany('TagTrack');
}

...
class Tag
public function tagTracks()
{
    return $this->hasMany('TagTrack');
}

...
class TagTrack
public function track()
{
    return $this->belongsTo('Track');
}
public function tag()
{
    return $this->belongsTo('Tag');
}
public function anotherRelationship(){
...
}

你可以做到:

$track->trackTags->myCustomPivotDataAndRelationship()

在TagTrack中,您可以自由添加我想要的关系和字段

注意,当您不需要访问轴心关系时,仍然可以保留多对多以供使用

单于奇略
2023-03-14

嗯:

$tag = Tag::firstOrCreate(array('text' => $tag_text));

TagTrackUser::create(array(
    "tag_mdbid" => $tag->mdbid,
    "track_mdbid" => $track->mdbid,
    "user_mdbid" => Auth::user()->mdbid
));

像这样的first或create按照名字所说的去做,其余的都非常直截了当、雄辩。

 类似资料:
  • 我有一个用户表和一个帐户表。 此帐户表定义用户可以拥有的帐户。 例如 账户: 用户: 我现在有另一个表:users\u accounts 我正在为新用户创建一个界面。在这个页面上,我有基本的细节,但也有一个复选框列表(从accounts表创建)。复选框表示用户需要为其设置的帐户。 我要做的是创建帐户时: 我还想将用户ID和他们需要设置的帐户添加到users_accounts表中。单个用户可能需要多

  • 事实上,我的问题很简单,但我找不到任何答案。 我使用的是Laravel Elotent,我有3张桌子: 一个数据透视表叫做: 我已经从我的公司对象中获得了,我正在尝试获取

  • 我想创建用户角色系统,为此我创建了三个表:用户、角色 它有一个belongToMany关系,透视表存储了用户id

  • 我正在制作一个VueJS表单,用户可以在其中编辑一个步骤。一个步骤可以有许多父产品。逻辑是一个步骤可以属于多个产品。我有一个名为products、product_step(透视表)和steps的表。 当用户第一次加载页面时,该数组将填充此stap的父产品。 此阵列将根据用户决定在前端执行的操作进行更改。假设他们希望产品n不再具有此步骤的访问权限。在这种情况下,产品将从阵列中删除。 我面临的问题是,

  • 我在我的透视表中有一个额外的用户名列,如何将用户名与角色同步? pivot表 我需要在字段中同步用户名 这是更新功能,我在其中添加了 这是我的中的关系 下面是表迁移 这是我在转储请求并验证用户名时得到的结果 转储代码

  • 我对从透视表订购记录有问题。我有三个表(多对多关系)像这样: 菜单 id 名称 页码 id 名称 menu_page id name 次序 menu_page_id menu_id page_id 如何使用Eloquent从数据透视表(菜单页面)中获取按“顺序”属性排序的所有记录?