【问题标题】:Laravel - Adding information to relationship outputLaravel - 向关系输出添加信息
【发布时间】:2016-04-25 22:57:03
【问题描述】:
  • 我有users
  • 我有pets
  • 他们之间的关系是belongsToMany
  • 这些表具有名为 user_pets 的数据透视表,其中包含有关用户特定宠物的信息。
  • 我使用$user->pets() 获取用户宠物,包括数据透视表信息。我的用户模型中的pets() 方法是:

    public function pets()
    {
       $pets = $this->belongsToMany(Pet::Class, 'user_pets')->withPivot(
        'id',
        'position',
        'level',
        'exp'
        )->orderBy('position','asc');
        return $pets;
    }
    
  • 如您所见,每个宠物都是levelexp 字段。我的pet_exp 表中列出了获得下一个级别所需的经验:

    ID | level | requiredExp 1 5 237 2 6 406 3 7 637 4 8 942 5 9 1326 6 10 1800 7 11 2369

  • 问题:我想用$user->pets()(上面的方法)返回宠物当前等级的requiredExp。我已经想了几个小时,想不出办法。

希望你能帮助我,谢谢!

【问题讨论】:

  • 如果宠物等级为5,您是要求返回,例如237,还是因为比宠物等级高一级,您要返回406?跨度>
  • 我要求返回 237。
  • Pet 模型添加属性是否可以接受?或者您是否必须在返回的pets() 数组中包含它?如果我这样做,我可能会在Pets 模型中添加一个requiredexp() 函数,该函数将返回$this->level 所需的exp。
  • 是的,可以接受,只要我不需要添加新的数据库字段。

标签: laravel


【解决方案1】:

我会这样做:

在您的 Pet 模型中添加 requiredexp 函数:

function requiredexp() {
    return DB::table('pet_exp')->where('level', $this->level)->value('requiredExp');
}

这应该返回你调用函数的宠物级别的 requiredExp(即$pet->requiredexp

编辑:

你也可以把它作为一个属性来做:

function getRequiredexpAttribute($value) {
    return DB::table('pet_exp')->where('level', $this->level)->value('requiredExp');
}

【讨论】:

  • 我面临的主要问题是使用$user->pets() 将其设为所有宠物的默认设置。这意味着在检索用户宠物时,每只宠物都会自动计算出这个值。我需要在我的关系输出中有这个值。
  • 我不完全确定我明白你在问什么,但我认为你可以用属性做你想做的事。我会将其编辑到我的答案中。
  • 我的意思是我在我的问题中发布的方法pets() 将输出每个宠物所需的宠物经验。我一直在尝试使用foreach,但没有成功。
猜你喜欢
  • 1970-01-01
  • 2017-09-21
  • 1970-01-01
  • 1970-01-01
  • 2014-08-17
  • 2015-12-09
  • 1970-01-01
  • 2012-12-24
  • 2019-11-14
相关资源
最近更新 更多