当前位置: 首页 > 知识库问答 >
问题:

Laravel 4雄辩的能力

焦宏硕
2023-03-14

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

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

在我看来,“一对一”意味着一级。表1表2

示例:用户::find(1)-

[内部查找用户1及其帖子]

“多对多”指2级。表1表2表3:

Example: User::find(1)->postcomments 

[内部查找用户1及其帖子,并查找帖子的评论]

那么,我们能把这个扩展到4个或5个级别吗?

数据库关系[项目(id)-项目标签(id, itemid, tagid)-标签(id)-标签类型(id, tagid, typeid)-类型(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');
}

}

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>";

}

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

以上代码工作正常

但是$学生-

没有按预期工作。如果我们能有一个工作代码来支持您的答案,那就太好了。

但是不管怎样,谢谢你的解释。


共有1个答案

阳凌
2023-03-14

这不是它的工作方式,再看看Laravel文档中给出的示例

一对一的

这里我们有两个模型之间的直接关系,在示例中,一个用户和他的手机。我知道现实世界并非如此。。但在这里,关系的每一方都只有一个。因此:

  • $user-

我们有两个表,用户电话,通过电话表中的用户id链接

一对多

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

  • $user-

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

多对多

从那以后,现在我们可以建立一种关系,在这种关系中,双方可以有不止一件事。。。让我们使用Laravel文档中的Users和Roles示例

一个User可以有任意数量的Roles,并且一个Roles可以出现在任意数量的Users上...

  • $user-

现在我们必须有3个表,usersrolesrole\u user,其中role\u user表包含useridrole\u id的映射。

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

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

// 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-

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

 类似资料:
  • 问题内容: 我想返回所有类别的所有项目。 此查询我现在返回的类别为1或2或3的项目。我需要返回的类别为1和2以及3的项目。 我怎样才能做到这一点? 问题答案: 试试这个: 使用查询将仅返回具有所有列出类别的项目。

  • 我有一个表事务与复合主键id,Nom,日期和一个表Cour与Nom作为主键和一个事务有关一个Cour。 我怎样才能得到一个有口才关系的特定交易的课程?

  • 我有一个名为的雄辩模型,链接到一个名为的数据库表。 是否有一个雄辩的函数可以让我从数据库中提取一个随机问题(或一组随机问题)?如下所示: 或者

  • 我们想用雄辩的ORM和Laravel 5实现复合主键http://www.mbarendezvous.com/ 据我所知,它目前还没有得到雄辩者的支持。请建议最好的替代方案。

  • 在有说服力的ORM上,是否有一种较短的方法在Laravel中插入数据? 目前我正在这样做: 就像你看到的,所有的列都像属性一样命名。 我知道您可以将对象与all()函数和fetch()一起使用。但是我从另一个对象(soap服务器)获取数据。 有没有办法转换这个?也许在模型上?

  • 我在使用laravel雄辩的ORM时遇到了一个问题。 基本上,我正在获取与用户相关的帖子,以及他的评论,但是,我正在尝试集成某种分页(我一次只想取5个帖子)。 而使用跳过方法,我总是得到以下laravel错误: 方法skip不存在。 这是我实际使用的代码片段。 有人能给我任何帮助吗? 帐户模型检索与用户相关的帖子模型(关系),但是,我想一次只收到5个帖子,用于基于ajax的请求。