laravel模型关联(一对多)

一对多

例如一个用户会有多条留言,有member会员表和message留言表,一对多关联的定义也是在 Eloquent 模型中写一个方法:

<?php

namespace App\Http\Models;

use Illuminate\Database\Eloquent\Model;

class Member extends Model
{
    /**
     * 获得用户的留言。
     */
    public function message()
    {
        return $this->hasMany('App\Http\Models\Message','member_id','id');
    }

}
其中'App\Http\Models\Message'是要关联的模型,member_id是message表(子表)中的外键字段,省略时laravel自动填充为(主表名_id),id是member表(主表)的主键,省略时laravel默认为id。

用法:

1、获取会员1058@qq.com对应的留言

$message = Member::where('email','1058@qq.com')->first()->message;

2、获取会员1058@qq.com对应的一天以前的留言

$message = Member::where('email','1058424094@qq.com')->first()
          ->message()->where('created_at','<',date('Y-m-d'))->get();

一对多(反向)

通过一对多的关联可以利用会员表获得会员的留言信息,如果想通过留言信息获得会员信息就需要用到hasMany的反向关联,需要在子级模型(message)中使用 belongsTo 方法定义它,如下所示

<?php

namespace App\Http\Models;

use Illuminate\Database\Eloquent\Model;

class Message extends Model
{

    /**
     * 获得留言的用户。
     */
    public function member()
    {
        return $this->belongsTo('App\Http\Models\Member','member_id','id')->withDefault([
            'user_name' => '阿文',
        ]);
    }

}

其中'App\Http\Models\Member'是要关联的模型,member_id是message表(子表)中的外键字段,省略时laravel自动填充为(主表名_id),id是member表(主表)的主键,省略时laravel默认为id。withDefault是主表中没有对应数据时(对应值为null)填充的数据。

用法:

1、获取id为1的留言对应的会员信息

        $member = Message::find(1)->member;

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值