PHP Laravel应用程序使用数据透视表

时间:2016-12-10 05:49:02

标签: php mysql laravel pivot-table

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

我的数据库有这些表需要彼此关系:

  • 用户
  • 书签
  • Bookmark_tag_lists
  • Bookmark_tags

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

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

与用户相关

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

与bookmark_tag_lists相关

  • 获取属于 bookmark_tag_lists id的所有 bookmark_tags

与bookmark_tags相关

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

用户

  • 有很多书签
  • 有很多bookmark_tags
  • 有很多bookmark_tag_lists

书签

  • 属于用户
  • 属于很多bookmark_tags

bookmark_tags

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

bookmark_tag_lists

  • 有很多bookmark_tags

*

1 个答案:

答案 0 :(得分: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);
} 

BookmarkTag模型:

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);
}