Orm Laravel 4雄辩的能力
我是新来的拉威尔,我曾在codeigniter工作。 我对雄辩的ORM概念着迷。 我有一个关于雄辩能力的一般性问题。 ORM的功能是什么,我的意思是我们可以获得相关表行的级别。 如果你看“Orm Laravel 4雄辩的能力,orm,laravel,relational-database,laravel-4,eloquent,Orm,Laravel,Relational Database,Laravel 4,Eloquent,我是新来的拉威尔,我曾在codeigniter工作。 我对雄辩的ORM概念着迷。 我有一个关于雄辩能力的一般性问题。 ORM的功能是什么,我的意思是我们可以获得相关表行的级别。 如果你看“ 一对一 一对多 多对多 多态关系 在我看来 “一对一”指1级。表1表2 示例:User::find(1)->posts; [内部查找用户1及其帖子] “多对多”指2级。表1表2表3: Example: User::find(1)->postcomments [内部查找用户1及其帖子,并查找帖子的
- 一对一
- 一对多
- 多对多
- 多态关系
示例:User::find(1)->posts;
[内部查找用户1及其帖子]
“多对多”指2级。表1表2表3:
Example: User::find(1)->postcomments
[内部查找用户1及其帖子,并查找帖子的评论]
那么,我们可以把它扩展到4级或5级吗
数据库关系[item(id)-itemtag(id,itemid,tagid)-tag(id)-tagtype(id,tagid,typeid)-type(id)]
谢谢
================
跟帖
虽然我喜欢msturdy的解释,但我不能让代码按照他解释的方式工作
这是我的数据库表代码
CREATE TABLE `roles` (
`id` INT(10) NOT NULL AUTO_INCREMENT,
`role` VARCHAR(45) NULL DEFAULT NULL,
PRIMARY KEY (`id`)
)
COLLATE='latin1_swedish_ci'
ENGINE=InnoDB
AUTO_INCREMENT=4;
CREATE TABLE `students` (
`id` INT(10) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(45) NULL DEFAULT NULL,
PRIMARY KEY (`id`)
)
COLLATE='latin1_swedish_ci'
ENGINE=InnoDB
AUTO_INCREMENT=5;
CREATE TABLE `student_role` (
`id` INT(10) NOT NULL AUTO_INCREMENT,
`student_id` INT(10) NULL DEFAULT NULL,
`role_id` INT(10) NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `fk_student_role_1_idx` (`student_id`),
INDEX `fk_student_role_2_idx` (`role_id`),
CONSTRAINT `fk_student_role_1` FOREIGN KEY (`student_id`) REFERENCES `students` (`id`) ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT `fk_student_role_2` FOREIGN KEY (`role_id`) REFERENCES `roles` (`id`) ON UPDATE NO ACTION ON DELETE NO ACTION
)
COLLATE='latin1_swedish_ci'
ENGINE=InnoDB
AUTO_INCREMENT=6;
模型
班上的学生口若悬河{
public function roles()
{
return $this->belongsToMany('Role', 'student_role');
}
public function students()
{
return $this->belongsToMany('Student', 'student_role');
}
}
类角色扩展得很有说服力{
public function roles()
{
return $this->belongsToMany('Role', 'student_role');
}
public function students()
{
return $this->belongsToMany('Student', 'student_role');
}
}
Route::get('aaaas/{id}',函数($id){
$student=student::find($id);
$studentstr=print\r($student->toArray(),true);
打印“学生:$studentstr”;
$roles=print\r($student->roles->toArray(),true);
打印“角色:$roles”;
}
================
以上代码工作正常
但是
$student->角色->学生
没有按预期工作。
如果我们能有一个工作代码来支持您的答案,那就太好了
但无论如何,感谢您的解释。这不是它的工作方式,请再看一看 一对一 这里我们有两个模型之间的直接关系,在示例中,一个
用户
和他的手机
。我知道在现实世界中不是这样的。但是在这里,在关系的每一边只有一个。。因此:
将只返回一项,即他的$user->phone
phone
将返回一个项目,即手机的所有者($phone->user
)user
用户
和电话
,通过电话
表中的用户id
链接
一对多
这里我们可以使用用户
和他的帖子
s的例子。在关系的一方,有一件事,另一方可以有一个或多个项目
将返回由我们的$user->posts
用户制作的
的集合Post
将为其$post->user
中的任何一个返回post
user
users
和posts
,由posts
表中的user\u id
链接
多对多
在此基础上,现在我们可以建立一种关系,其中每一方都可以有不止一件事……让我们使用Laravel文档中的User
s和Role
s的示例
单个用户
,可以有任意数量的角色
s,并且角色
s可以出现在任意数量的用户
s上……现在我们有:
将显示该$user->roles
用户的
s角色
users
、roles
和role\u user
,其中role\u user
表包含userid
和role\u id
的映射
如果在User
和Town
之间存在第二个多对多关系,则需要另外两个表towns
和Town\u User
,才能链接这两个模型
现在,我想这就是你的问题,你可以把这些放在一起,画出任意数量的模型之间的关系。下面是一个简单的例子,说明一些一对多和多对多的关系:
这意味着:
将为您提供$user->posts
用户的
Post
可以为您提供一组$user->posts->tags
s,这些标签被分配给用户制作的Tag
sPost
可以为您提供由具有特定$role->users->posts
角色的
用户制作的
的集合Post
…等等等等!希望这能让事情变得更清楚?:)虽然我喜欢你的解释,但我无法将你所说的写进有效的代码中。好吧,好吧……想想你想做什么,尝试一下解决方案,然后用你的代码在这里发布你的努力!:)然后我们可以看一看,并给你一些建议……一旦你想到了,你会发现它会带来很多麻烦有意义!对于
belongToMany
的第二个参数,您需要传递用于建立连接的表的列,而不是表名