我不熟悉一起定义关系和框架,我只是习惯了原始 SQL。做了我的功课(google + Laravel 文档),但我认为我只是没有正确理解它。
相关资料如下: 用户表:
Table: Users
id - int (auto increment)
username - varchar
挑战表:
Table: Challenges
id - int (auto increment)
name - varchar
用户挑战链接
Table User_challenge_links
id - int (auto increment)
user_id - int
challenge_sub_categories_id - int
挑战_子_类别
Table Challenge_sub_categories
id - int (auto increment)
category_id -
sub_category_id -
challenge_id -
所以我的目标.. 用户->挑战。
class User extends Eloquent
{
protected $table = "users";
public function challenges() {
// get user-> challenges
}
}
关系:
- 一个用户有很多 User_challenge_links
- User_challenge_link 有一个 challenge_sub_categories_id(因此是一个 challenge_sub_category)
- 来自 challenges_sub_categories 的 challenge_id 匹配挑战表中的挑战
任何帮助,甚至为我指出正确的方向,我们都将不胜感激!
编辑: 示例数据: 用户数据
Users
id name
1 "Sjaak"
2 "Henk"
类别数据 身份证名称 1 “福” 2 “酒吧”
子类别数据 身份证名称 1 “亚富” 2 “子栏”
挑战数据 身份证名称 1 “摇摆达福” 2“禁止一切” 3 “酒吧”
Challenge_sub_categories 数据
id category_id sub_category_id challenge_id
1 1 1 1
2 2 1 1
3 1 2 2
4 2 1 3
5 2 2 2
User_challenge_links 数据
id user_id Challenge_sub_categories_id
1 1 1
2 1 3
3 2 2
4 2 3
5 2 4
数据流:
用户可以创建类别或使用现有类别并将挑战链接到它们(现有的或新的)。但是,用户也可以选择使用子类别,然后他将子类别链接到一个类别并将挑战链接到该类别。
因此,类别是强制性的,但子类别不是。但是,如果使用子类别(再次.. 现有的或新的),挑战将与该子类别相关联。
注意:一个子类别可以连接到多个类别
category - House
sub_category - Cleaning
Challenge - getting special soap
category - Car
sub_category - Cleaning
Challenge - getting special soap
category - Showering
Challenge - getting special soap
这些是一些可能的情况
最佳答案
此设置应该可以让您继续。我尽量使命名尽可能简单。
users
id
username
challenge_user
user_id
challenge_id
challenges
id
name
topic_id
category_id
topics
id
name
categories
id
name
定义 Eloquent 模型
class User extends Eloquent {
public function challenges() {
return $this->belongsToMany('Challenge');
}
}
class Challenge extends Eloquent {
public function users() {
return $this->belongsToMany('User');
}
public function topic() {
return $this->belongsTo('Topic');
}
public function category() {
return $this->belongsTo('Category');
}
}
class Topic extends Eloquent {
public function challenges() {
return $this->hasMany('Challenge');
}
}
class Category extends Eloquent {
public function challenges() {
return $this->hasMany('Challenge');
}
}
使用您的 Eloquent 模型……只是您可以做什么的一些示例。
// Collection of all Challenges by Topic name
Topic::with('challenges')->whereName($topic_name)->first()->challenges;
// Collection of all Challenges by Category name
Category::with('challenges')->whereName($category_name)->first()->challenges;
// Collection of all Users by Challenge id
Challenge::with('users')->find($challenge_id)->users;
// Collection of Users with atleast 2 Challenges
User::has('challenges', '>', 1)->get();
// Attach Challenge to User
$user = User::find($id);
$user->challenges()->attach($challenge_id);
// Assign a Topic to a Challenge
$challenge = Challenge::find($challenge_id);
$topic = Topic::find($topic_id);
$challenge->topic()->associate($topic);
$challenge->save();
引用和建议阅读:
Laravel Eloquent Relationships belongsTo
belongsToMany
hasMany
Querying relations 模型::有()
Eager Loading 模型::with()
Dynamic Properties for Accessing Relations解析 $model->relationship
Inserting related Models attach()
关联()
Working with Pivot tables如果您需要从数据透视表中检索额外的数据。
关于php - Laravel:如何使用多个数据透视表关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23336145/