Laravel Eloquent ORM 关联关系

Begin

1:1(一对一)

官方描述:一对一关联是一个非常简单的关联关系,例如,一个User模型有一个与之对应的Phone模型。要定义这种模型,我们需要将phone方法置于User模型中,phone方法应该返回Eloquent模型基类上hasOne方法的结果:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class User extends Model{ /** * 获取关联到用户的手机 */ public function phone() { return $this->hasOne('App\Phone'); } }

传递给hasOne方法的第一个参数是关联模型的名称,关联关系被定义后,我们可以使用Eloquent的动态属性获取关联记录。动态属性允许我们访问关联函数就像它们是定义在模型上的属性一样:

1:M(一对多)

官方描述:“一对多”是用于定义单个模型拥有多个其它模型的关联关系。例如,一篇博客文章拥有无数评论,和其他关联关系一样,一对多关联通过在Eloquent模型中定义方法来定义:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Post extends Model{
    /**
     * 获取博客文章的评论
     */
    public function comments()
    {
        return $this->hasMany('App\Comment');
    }
}

记住,Eloquent会自动判断Comment模型的外键,为方便起见,Eloquent将拥有者模型名称加上id后缀作为外键。因此,在本例中,Eloquent假设Comment模型上的外键是post_id

关联关系被定义后,我们就可以通过访问comments属性来访问评论集合。记住,由于Eloquent提供“动态属性”,我们可以像访问模型的属性一样访问关联方法:

M:1(多对一)

belongTo()


M:M(多对多)

官方描述:

多对多关系比hasOnehasMany关联关系要稍微复杂一些。这种关联关系的一个例子就是一个用户有多个角色,同时一个角色被多个用户共用。例如,很多用户可能都有一个“Admin”角色。要定义这样的关联关系,需要三个数据表:usersrolesrole_userrole_user表按照关联模型名的字母顺序命名,并且包含user_idrole_id两个列。

多对多关联通过编写一个调用Eloquent基类上的belongsToMany方法的函数来定义:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class User extends Model{
    /**
     * 用户角色
     */
    public function roles()
    {
        return $this->belongsToMany('App\Role');
    }
}

End

日记本

如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!

赞赏支持
被以下专题收入,发现更多相似内容