为了账号安全,请及时绑定邮箱和手机立即绑定

Laravel:根据条件创建 HasMany 关系

Laravel:根据条件创建 HasMany 关系

PHP
千巷猫影 2022-11-12 13:42:55
我需要根据性别条件显示复制品再现表:$table->bigIncrements('id');$table->unsignedInteger('father_id');$table->unsignedInteger('mother_id');...我需要根据性别检索复制品用户.phppublic function reproductions(){    if($this->gender == 'm'){        return $this->hasMany(Reproduction::class, 'father_id');    }else{        return $this->hasMany(Reproduction::class, 'mother_id');    }}再现表:id    father_id    mother_id1         1            22         1            33         1            4当我检索 ID 为 1 的用户的复制品时,它需要显示 3 个复制品,但它返回 null 集合$firstUser = User::find(1); // User Id with 1 has gender mdd($firstUser->reproductions->count()); // Should return 3 but returns null collection
查看完整描述

1 回答

?
动漫人物

TA贡献1815条经验 获得超10个赞

您可以创建两种不同的关系。


public function maleReproductions(){

        return $this->hasMany(Reproduction::class, 'father_id');

}

public function feMaleReproductions(){

        return $this->hasMany(Reproduction::class, 'mother_id');

}

现在基于$user你可以附加关系。


$productions = [];

$user = User::where('id',1)->first();

if($user->gender == 'm'){

    $productions = $user->maleProductions;

} else {

    $productions = $user->feMaleProductions;

}

对于用户集合,附加两者的关系。并根据条件访问特定的内容。


$users = User::with('maleReproductions', 'femaleReproductions')->get();


foreach($users as $user){

    if($user->gender == 'm'){

       $productions = $user->maleProductions;

    } else {

       $productions = $user->feMaleProductions;

    }

}


查看完整回答
反对 回复 2022-11-12
  • 1 回答
  • 0 关注
  • 270 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信