首页 > 开发 > PHP > 正文

laravel学习教程之关联模型

2024-05-04 22:28:58
字体:
来源:转载
供稿:网友

Eloquent: 关联模型

简介

数据库中的表经常性的关联其它的表。比如,一个博客文章可以有很多的评论,或者一个订单会关联一个用户。Eloquent 使管理和协作这些关系变的非常的容易,并且支持多种不同类型的关联:

    一对一

    一对多

    多对多

    远程一对多

    多态关联

    多态多对多关联

定义关联

Eloquent 关联可以像定义方法一样在 Eloquent 模型类中进行定义。同时,它就像 Eloquent 模型自身一样也提供了强大的查询生成器。这允许关联模型可以链式的执行查询能力。比如:

$user->posts()->where('active', 1)->get();

但是,在更深入的使用关联之前,让我们先来学习一下如何定义各种类型的关联。

一对一

一对一的关联是最基础的关联。比如,一个 User 模型可能关联一个 Phone。我们需要在 User 模型上放置一个 phone 方法来定义这种关联。phone 方法应该返回一个基类 Eloquent 模型上 hasOne 方法的结果:

<?phpnamespace App;use Illuminate/Database/Eloquent/Model;class User extends Model{ /**  * Get the phone record associated with the user.  */ public function phone() {  return $this->hasOne('App/Phone'); }}

传递到 hasOne 方法的第一个参数应该是关联模型的名称。一旦关联被定义完成,我们可以使用 Eloquent 的动态属性来访问关联模型的记录。动态属性允许你访问关联函数,就像是它们是定义在模型中的属性一样:

$phone = User::find(1)->phone;

Eloquent 假定所关联的外键是基于模型的名称的。在这个前提下,Phone 模型会自动的假定其拥有一个 user_id 外键。如果你希望修改这个惯例,你可以传递第二个参数到 hasOne 方法中:

return $this->hasOne('App/Phone', 'foreign_key');

另外,Eloquent 也会假定外键应该在其上层模型上拥有一个匹配的 id(或者自定义的 $primaryKey)值。换句话说,Eloquent 会查询 Phone 记录中的 user_id 列所对应的用户的 id 列的记录。如果你希望关联使用 id 以外的值,你可以传递第三个参数到 hasOne 方法来指定自定义的键:

return $this->hasOne('App/Phone', 'foreign_key', 'local_key');

定义相对的关联

那么,我们可以从我们的 User 中访问

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表