我对定义关系和框架都是新手,我只是习惯了原始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
Challenge_sub_categories
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
}
}
这些关系:
任何帮助,甚至为我指出正确的方向,都将不胜感激!
编辑:示例数据:用户数据
Users
id name
1 "Sjaak"
2 "Henk"
类别数据id名称1“Foo”2“Bar”
Sub_categories数据id name 1"SubFoo"2"SubBar"
挑战数据id名称1“Swing dat Foo”2“Bar所有内容”3“Foo the Bar”
挑战_子_类别数据
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
数据流:
用户可以创建类别或使用现有的类别,并将挑战链接到它们(现有的或新的)。然而,用户也可以选择使用一个子类别,然后他将该子类别链接到一个类别,并将挑战链接到该类别。
所以,类别是强制性的,但sub_category不是。然而,如果使用sub_category(再次...现有的或新的),挑战将连接到该子类别。
注意:子类别可以连接到多个类别
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
定义你雄辩的模型
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');
}
}
用你雄辩的模型。。。只是一些你能做的例子。
// 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雄辩的关系属性到
属性到很多
has很多
查询关系Model::has()
急切加载Model::with()
访问关系的动态属性解析$model-
插入相关模型
attach()
associate()
查询范围
使用数据透视表如果需要从数据透视表中检索额外数据。
问题内容: 我是一起定义关系和框架的新手,我只是习惯于原始SQL。我做了家庭作业(google + Laravel文档),但是我认为我不太了解它。 以下是相关信息:用户表: 挑战表: User_challenge_links Challenge_sub_categories 所以我的目标..用户->挑战。 关系: 一个用户有许多User_challenge_links 一个User_challen
我正在创建一个应用程序,其中用户可以被分配到多个组织,组织可以有多个用户--多对多的关系。 我希望能够这样做:以及 我有表... 我有表... 呃!用户-组织,组织-用户! 和我有数据透视/映射/等。表 表有一个字段和一个字段。 Elecoquent假设并期望-但这不是我为表命名的,也不想重命名。 我设置了以下内容 用户: 然后我测试一下: 并得到以下错误: SQLState[42S02]:找不到
如果我尝试以下操作,则页面正在加载: 有以下表格:-用户-user_department-部门 数据透视表用户\u部门有两个外键:-部门\u id-用户\u id 在我的用户模型中: 在我的部门模型中: 顺便说一下:以下代码正在工作: 但是我无法在不破坏我的页面的情况下获得用户的部门。 有什么想法吗?
我试图创建一个关系,通过一个名为年级的模型访问一个名为注释的表,通过年级中的学生加载 年级模型和学生模型都属于其他模型 根据我的理解,不可能访问需要透视表的hasManyThrough关系(注释没有年级标识符,只有学生标识符) 我为Laravel 4@HasManyThrough找到了这些函数,它们具有一对多关系,但它给了我一个错误类“App\illumb\Database\Eloquent\Re
我有三张桌子: 类别(id、名称) 类别赛(类别赛id,锦标赛id)-- Category是可用类别列表Category_Tornament是管理员配置的类别列表Category_Tornament用户是用户已注册的类别 要获得锦标赛中的所有类别,我可以使用以下工具轻松完成: 在竞赛模型中定义归属关系 我不知道如何定义与上一个表的关系。 我需要的是用户单击几个类别,我可以运行如下操作: 我应该在哪
问题是我有表格,我想得到它的所有成员。 我创建了一个表透视分组,它从表表单中检索form_id,并从表用户中user_id。但是当我试图检索信息时,我得到了这个:尝试读取bool上的属性“firstname”(视图:/.../资源/视图/分组/list.blade.php) 在我的模型中,我有:窗体: 用户: list.blade.php($表单对应于我之前在所有表单中创建的一个表单):