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

如何在 Laravel 中连接表?

如何在 Laravel 中连接表?

PHP
喵喔喔 2023-04-15 20:22:36
我是 Laravel 的新手,我有一个关于 Eloquent 的问题:这是我的数据库表结构:users- id- user_id- username- name- email- password- email_verified_at- remember_tok- created_at- updated_atchallenges- id- challenge_id- category_id- hashtag- title- description- duration- link- created_at- updated_at- user_iduser_challenges- user_id- challenge_id- duration- created_at- updated_at我想要实现的是显示用户的挑战,例如,如果用户在用户仪表板中加入挑战,我想显示他加入的挑战,以及用户创建的挑战(如果他创建了任何);模型\用户.phpclass User extends Authenticatable{    use Notifiable;    public function challenges() {        return $this->hasMany(Challenge::class, 'user_id');    }    public function userChallenges() {        return $this->hasMany(UserChallenge::class, 'user_id');    }}模型\挑战.phpclass Challenge extends Model{    public function user () {        return $this->belongsTo(User::class, 'user_id');    }}模型\UserChallenge.phpclass UserChallenge extends Model{    public function user () {        return $this->belongsTo(User::class, 'user_id');    }}这是我的家庭控制器中的内容: App\Http\Controllers\HomeController.phpclass HomeController extends Controller{    public function index()    {        $user_id = auth()->id();        $user = User::find($user_id);        return view('home')            ->with('challenges', $user->challenges)            ->with('userChallenges', $user->userChallenges);    }}这是我目前在“我的仪表板”中获得的“加入挑战”的内容 - 但如何在返回视图时加入表格,以便我也可以获得挑战主题标签标题?就像我在“我的挑战”部分下获得的一样? 仪表板更新:我应该将什么添加到我的数据库中,以便我可以计算已加入挑战的用户数量?
查看完整描述

1 回答

?
当年话下

TA贡献1890条经验 获得超9个赞

为了获得用户创建的挑战,我相信您已经正确地做到了。


并让用户加入挑战。您几乎可以正确使用数据透视表。您可以在 laravel 文档中查看多对多关系。


这些是用于检索用户创建的挑战和用户加入的挑战的示例代码。这些代码应该驻留在您的用户模型中,您应该保留该模型。


public function created_challenges()

{

    return $this->hasMany(Challenge::class,'user_id','id');

}


public function joined_challenges()

{

     return $this->belongsToMany(Challenges::class, 'user_challenges', 'user_id', 'challenges_id');

}

一旦关系正常工作,您就可以简单地使用从关系返回的集合。将 传递$user->joined_challenges给视图后,您可以执行以下操作


@foreach ($joined_challenges as $challenge)

    <p>{{$challenge->hashtag}}</p>   

    <p>{{$challenge->title}}</p>   

@endforeach

让我知道这行得通,干杯!;)


查看完整回答
反对 回复 2023-04-15
  • 1 回答
  • 0 关注
  • 69 浏览

添加回答

举报

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