【问题标题】:PHP Laravel App with many to many relations using Pivot Tables使用数据透视表具有多对多关系的 PHP Laravel 应用程序
【发布时间】:2016-12-10 05:49:01
【问题描述】:

我正在使用 PHP 的 Laravel 框架构建一个书签应用程序,并希望在 Laravel ORM 中生成一些数据透视表。

我的数据库中有这些需要相互关联的表:

  • 用户
  • 书签
  • Bookmark_tag_lists
  • 书签标签

有人可以帮助定义我需要添加到每个模型和表中的哪些方法,以便为下面描述的数据透视表创建和功能创建哪些方法?


SQL 查询我需要能够通过这些调用获取记录:

与用户相关

  • 获取属于用户 ID 的所有 bookmark_tag_lists
  • 获取属于用户ID的所有bookmark_tags
  • 获取属于用户ID的所有书签

与 bookmark_tag_lists 相关

  • 获取属于 bookmark_tag_lists id 的所有 bookmark_tags

与书签标签相关

  • 获取属于 bookmark_tag id 的所有 书签

用户

  • 有很多书签
  • 有很多书签标签
  • 有很多bookmark_tag_lists

书签

  • 属于某个用户
  • 属于许多书签标签

书签标签

  • 有很多书签
  • users table 上的id 列相关
  • bookmarks table 上的id 列相关
  • bookmark_tag_lists table 上的id 列相关

bookmark_tag_lists

  • 有很多书签标签

*

【问题讨论】:

  • 你们的关系在我看来有点混乱。您能详细说明bookmarkbookmark_tagbookmark_tag_lists 的用途吗?

标签: php mysql laravel pivot-table


【解决方案1】:

用户模型:

public function bookmarks() {
    return $this->hasMany(Bookmark::class);
}

public function bookmarkTags() {
    return $this->hasMany(BookmarkTag::class);
}

public function bookmarkTagLists() {
    $bookmarkTags = $this->bookmarkTags;
    $bookmarkTagLists = array();
    foreach ($bookmarkTags as $bookmarkTag) {
        $bookmarkTagLists[] = $bookmarkTag->bookmarkTagList;
    }
    return array_unique($bookmarkTagLists);
}

书签模型:

public function user() {
    return belongsTo(User::class);
}

public function bookmarkTags() {
    return bolongsToMany(BookmarkTag::class);
}

public function tags() {
    return hasMany(BookmarkTag::class);
} 

书签标签模型:

public function bookmarks() {
    return belongsToMany(Bookmark::class);
}

public function user() {
    return belongsTo(User::class);
}

public function bookmarkTagList() {
    return $this->belongsTo(BookmarkTagList::class);
}

BookmarkTagList 模型:

public function bookmarkTags() {
    return hasMany(BookmarkTag::class);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-07
    • 2023-02-05
    • 1970-01-01
    • 2018-09-23
    • 2019-02-13
    • 2018-09-15
    相关资源
    最近更新 更多