Laravel-向关系输出添加信息 我有用户表 我有pets表 它们之间的关系属于同态 这些表具有名为user\u pets的数据透视表,其中包含有关用户特定宠物的信息

Laravel-向关系输出添加信息 我有用户表 我有pets表 它们之间的关系属于同态 这些表具有名为user\u pets的数据透视表,其中包含有关用户特定宠物的信息,laravel,Laravel,我使用$user->pets()获取用户pets,包括透视表信息。我的用户模型中的pets()方法是: public function pets() { $pets = $this->belongsToMany(Pet::Class, 'user_pets')->withPivot( 'id', 'position', 'level', 'exp' )->orderBy('position','asc'); return $

我使用
$user->pets()
获取用户pets,包括透视表信息。我的用户模型中的
pets()
方法是:

public function pets()
{
   $pets = $this->belongsToMany(Pet::Class, 'user_pets')->withPivot(
    'id',
    'position',
    'level',
    'exp'
    )->orderBy('position','asc');
    return $pets;
}
  • 如您所见,每只宠物都有
    等级
    exp
    字段。我的
    pet\u exp
    表中列出了获得下一级别所需的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()
    (上面的方法)返回宠物当前等级所需的经验值。我已经想了几个小时,想不出一个方法来做这件事
    希望你能帮助我,谢谢

    我会这样做:

    在您的
    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');
    }
    

    例如,如果宠物级别为
    5
    ,您是否要求返回
    237
    ,或者您是否希望返回
    406
    ,因为这比宠物级别高一级?我要求返回237。是否可以将属性添加到
    pet
    模型?还是必须将其放入返回的
    pets()
    数组中?如果我这样做,我可能会在
    Pets
    模型中添加一个
    requiredxp()
    函数,该函数将返回
    $this->level
    所需的exp。是的,只要我不需要添加新的数据库字段,它就会被接受。我面临的主要问题是使用
    $user->Pets()
    为所有宠物设置默认值。这意味着,当检索用户宠物时,每个宠物都会自动计算该值。我需要在我的关系输出中有这个值。我不完全确定我理解你的要求,但我认为你可以用属性做你想要的。我将把它编辑到我的答案中。我的意思是,我在问答中发布的方法,
    pets()
    ,将为每只宠物输出宠物所需的经验。我一直在尝试使用
    foreach
    ,但运气不好。