首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel 4雄辩能力

Laravel 4雄辩能力
EN

Stack Overflow用户
提问于 2013-09-05 14:34:51
回答 1查看 1.5K关注 0票数 2

我是Laravel的新手,我以前做过代码点火器的工作。我被雄辩的ORM概念迷住了。我有一个关于口才能力的一般性问题。ORM的功能是什么,我的意思是我们可以得到相关的表行。如果你看"http://four.laravel.com/docs/eloquent#relationships

  • 一对一
  • 一对多
  • 多对多
  • 多态关系

在我看来,“一对一”指的是1级。table1 table2。

Example: User::find(1)->posts;

内部查找用户1和他的帖子

“多到多”指的是第2级。table1 table2 table3:

代码语言:javascript
复制
Example: User::find(1)->postcomments 

内部查找用户1和他的帖子,并找到文章的评论

所以,我们能把它扩展到4层或5级吗?

数据库关系-itemtag(id,itemid,tagid) - tag(id) - tagtype(id,tagid,type id)- type(id)

谢谢

================

以下职位

虽然我喜欢msturdy的解释,但我不能让代码那样工作,他解释道。

这是我带数据库表的代码。

代码语言:javascript
复制
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;

模型

班级学生扩展口才{

代码语言:javascript
复制
public function roles()
{
    return $this->belongsToMany('Role', 'student_role');
}

}

类角色扩展雄辩{

代码语言:javascript
复制
public function students()
{
    return $this->belongsToMany('Student', 'student_role');
}

}

代码语言:javascript
复制
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>";

}

================

以上代码工作正常。

但是学生->角色->学生

不像预期的那样工作。如果我们能有一个工作代码来支持你的答案,那就太好了。

不过,还是谢谢你的解释。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-05 16:45:20

这并不完全是它的工作方式,再看看Laravel docs中给出的例子

一对一

这里我们有两个模型之间的直接关系,在这个例子中,User和his Phone。我知道现实世界不是这样..。但是这里有,在关系的每一方只有一个,。所以:

  • $user->phone只会返回一个项目,他的Phone
  • $phone->user将永远返回一个项目,手机的所有者(User)

我们有两个表,usersphones,由phones表中的user_id链接

一对多

在这里,我们可以使用User和他的Post的例子。在关系的一方,有一件事,另一件事,可以有一个或多个项目。

  • $user->posts将返回由我们的User制作的Post的集合。
  • $post->user将为他的任何一个Post返回User

但是,我们仍然只有两个表,usersposts,由posts表中的user_id链接。

many-to-many

从那以后,现在我们可以有一种关系,在每一方,可以有不止一件事.让我们使用Laravel中的Users和Roles的例子

单个User可以有任意数量的RoleRole可以出现在任意数量的User上。现在我们有:

  • $user->roles将显示该UserRoles。

现在我们必须有3个表,usersrolesrole_user,其中role_user表包含user_ids和role_ids的映射。

如果您在UserTown之间有第二个多对多的关系,那么您还需要另外两个表,townstown_user,才能将这两个模型连接起来。

现在,我认为这就是你的问题所在,你可以把这些放在一起,在任意数量的模型之间建立联系。这里有一个简单的例子来说明几个一对多,多到多的关系:

代码语言:javascript
复制
// Our User model
class User extends Eloquent {

    // one-to-many with Post
    public function posts()
    {
        return $this->hasMany('Post');
    }

    // one-to-many with Role
    public function roles()
    {
        return $this->belongsToMany('Role');
    }
}

// Our Role model
class Role extends Eloquent {

    //many-to-many with User
    public function users()
    {
        return $this->belongsToMany('User');
    }

}

// Our Post model definition
class Post extends Eloquent {

    // one-to-many with User
    public function user()
    {
        return $this->belongsTo('User');
    }

    // many-to-many with Tag
    public function tags()
    {
        return $this->belongsToMany('Tag');
    }
}

// Our Tag model definition
class Tag extends Eloquent {

    // many-to-many with Post
    public function posts()
    {
        return $this->belongsToMany('Post');
    }
}

这意味着:

  • $user->posts会给你一个UserPost
  • $user->posts->tags可以为您提供一个分配给用户创建的Posts的Tag集合。
  • $role->users->posts可以为您提供一组由Users使用特定Role创建的Role集合。

..and等等!希望这让事情更清楚了?)

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18639188

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档