【发布时间】:2013-09-09 10:57:47
【问题描述】:
我是 Laravel 的新手,我曾经在 codeigniter 上工作。 我对 Eloquent ORM 的概念很着迷。 我有一个关于 Eloquent 功能的一般性问题。 ORM的能力是什么,我的意思是我们可以在什么级别获得相关的表行。 如果你看“http://four.laravel.com/docs/eloquent#relationships
- 一对一
- 一对多
- 多对多
- 多态关系。
在我看来 “一对一”表示级别 1。table1 table2
Example: User::find(1)->posts;
[内部查找用户1及其帖子]
“Many To Many”表示2级。table1 table2 table3:
Example: User::find(1)->postcomments
[内部查找用户1和他的帖子并找到帖子的cmet]
那么,我们可以将其扩展到 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;
型号
学生类扩展 Eloquent {
public function roles()
{
return $this->belongsToMany('Role', 'student_role');
}
}
class Role 扩展 Eloquent {
public function students()
{
return $this->belongsToMany('Student', 'student_role');
}
}
Route::get('aaaas/{id}', function($id){
$student = Student::find($id);
$studentstr = print_r($student->toArray(), true);
print "<pre>student: $studentstr</pre>";
$roles = print_r($student->roles->toArray(), true);
print "<pre>role: $roles</pre>";
}
=================
以上代码运行良好
但是 $学生->角色->学生
没有按预期工作。 如果我们能有一个工作代码来支持您的回答,那就太好了。
不过还是谢谢你的解释。
【问题讨论】:
-
使用
belongsToMany的第二个参数,您需要传递用于建立连接的表的COLUMN...而不是表名
标签: orm laravel relational-database laravel-4 eloquent