Orm Laravel 4雄辩的能力

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及其帖子,并查找帖子的

我是新来的拉威尔,我曾在codeigniter工作。 我对雄辩的ORM概念着迷。 我有一个关于雄辩能力的一般性问题。 ORM的功能是什么,我的意思是我们可以获得相关表行的级别。 如果你看“

  • 一对一
  • 一对多
  • 多对多
  • 多态关系
在我看来 “一对一”指1级。表1表2

示例: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
现在我们必须有3个表,
users
roles
role\u user
,其中
role\u user
表包含
userid
role\u id
的映射

如果在
User
Town
之间存在第二个多对多关系,则需要另外两个表
towns
Town\u User
,才能链接这两个模型

现在,我想这就是你的问题,你可以把这些放在一起,画出任意数量的模型之间的关系。下面是一个简单的例子,说明一些一对多和多对多的关系:

这意味着:

  • $user->posts
    将为您提供
    用户的
    Post
  • $user->posts->tags
    可以为您提供一组
    Tag
    s,这些标签被分配给用户制作的
    Post
    s
  • $role->users->posts
    可以为您提供由具有特定
    角色的
    用户制作的
    Post
    的集合

…等等等等!希望这能让事情变得更清楚?:)

虽然我喜欢你的解释,但我无法将你所说的写进有效的代码中。好吧,好吧……想想你想做什么,尝试一下解决方案,然后用你的代码在这里发布你的努力!:)然后我们可以看一看,并给你一些建议……一旦你想到了,你会发现它会带来很多麻烦有意义!对于
belongToMany
的第二个参数,您需要传递用于建立连接的表的列,而不是表名