codecamp

Laravel 8 一对多

一对多关联用于定义单个模型拥有任意数量的其它关联模型。例如,一篇博客文章可能会有无限条评论。正如其它所有的 Eloquent 关联一样,一对多关联的定义也是在 Eloquent 模型中写一个方法:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

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

记住一点,Eloquent 将会自动确定 Comment 模型的外键属性。按照约定,Eloquent 将会使用所属模型名称的「Snake Case」形式,再加上 _id 后缀作为外键字段。因此,在上面这个例子中,Eloquent 将假定 Comment 模型对应到 Post 模型上的外键就是 post_id

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

$comments = App\Models\Post::find(1)->comments;

foreach ($comments as $comment) {
    //
} 

当然,由于所有的关联还可以作为查询语句构造器使用,因此你可以使用链式调用的方式,在 comments 方法上添加额外的约束条件:

$comment = App\Models\Post::find(1)->comments()->where('title', 'foo')->first(); 

正如 hasOne 方法一样,你也可以通过向 hasMany 方法传递附加参数来覆盖默认的外键和本地键:

return $this->hasMany('App\Models\Comment', 'foreign_key');

return $this->hasMany('App\Models\Comment', 'foreign_key', 'local_key'); 
Laravel 8 定义反向关联
Laravel 8 一对多 (反向)
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

Laravel 8 入门指南

Laravel 8 基础功能

Laravel 8 前端开发

Laravel 8 安全相关

Laravel 8 综合话题

数据库

Eloquent ORM

测试相关

官方拓展包

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }