关于tp5关联模型的使用记录

一对多

假如现有数据表 

  • user---用户表--字段为 id,name
  • article--文章表--字段为id,title,content,user_id
  • comment--评论表--字段为id,content,article_id,user_id

表之间的关系为

  • 一个用户有多个文章
  • 一个用户有多个评论
  • 一篇文章有多个评论

在tp5中的代码表示为

//User模型
public function Articles()
{
    //第一个参数为要绑定的模型名称
    //第二个参数为要绑定的模型的外键
    //第三个参数为自身的主键
    return $this->hasMany('Article');
}

public function Comments()
{
    return $this->hasMany('Comment');
}

//Article模型
public function User()
{
    //第一个参数为要绑定的模型名称
    //第二个参数为自身的外键
    //第三个参数为要绑定的模型的主键
    return $this->belongsTo('User');
}

public function Comments()
{
    return $this->hasMany('Comment');
}

//Comment模型
public function User()
{
    return $this->belongsTo('User');
}

public function Article()
{
    return $this->belongsTo('Article');
}

使用

public function index()
{
    //查出用户并预载入关联的文章表,评论表
    $user = User::get(1,'Articles,Comments');
    
    //此处调用的是user关联的article对象集数组,里面的每一个值都是一个article对象
    //获取单一文章的title属性---$user->Articles[0]->title
    dump($user->Articles);

    //此处调用的是user与article关联的HasMany对象,包含了它们的关联关系等等
    //相似于Article::where('user_id',1)这个查询对象
    dump($user->Articles());

    //获取用户评论的方法同获取文章表一样
    /********************************************************************/
    
    //查出文章并与载入关联的用户表
    $article = Article::get(1,'User');

    //此处调用的是article关联的user对象
    //获取用户的name属性---$article->User->name
    dump($article->User);

    //此处调用的是article与user关联的BelongsTo对象
    //相似于User::where('id',$article->user_id)这个查询对象
    dump($article->User());

    /******************************************************************/
    //获取user关联的article关联的comment对象集数组
    dump($user->Articles->Comments);

    //获取user关联的article关联的comment的HasMany查询对象
    dump($user->Articles->Comments());

    //获取article关联的user关联的comment对象集数组
    dump($article->User->Comments);

    //获取article关联的user关联的comment的HasMany查询对象
    dump($article->User->Comments());
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值