繁体   English   中英

如何在 Laravel 中加入表?

[英]How to join tables in Laravel?

我是 Laravel 的新手,我有一个关于 Eloquent 的问题:

这是我的数据库表结构:

users
- id
- user_id
- username
- name
- email
- password
- email_verified_at
- remember_tok
- created_at
- updated_at

challenges
- id
- challenge_id
- category_id
- hashtag
- title
- description
- duration
- link
- created_at
- updated_at
- user_id

user_challenges
- user_id
- challenge_id
- duration
- created_at
- updated_at

我想要实现的是显示用户的挑战,例如,如果用户在用户仪表板中加入挑战,我想显示他加入的挑战,以及用户创建的挑战(如果他创建任何);

型号\用户.php

class 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');
    }
}

型号\挑战.php

class Challenge extends Model
{
    public function user () {
        return $this->belongsTo(User::class, 'user_id');
    }
}

型号\UserChallenge.php

class UserChallenge extends Model
{
    public function user () {
        return $this->belongsTo(User::class, 'user_id');
    }
}

这就是我家 Controller 中的内容: App\Http\Controllers\HomeController.php

class 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);
    }
}

这是我目前在“我的仪表板”中为“加入的挑战”获得的 - 但是在返回视图时如何加入表格,以便我还可以获得挑战主题标签标题? 就像我在“我的挑战”部分下得到的一样? 仪表板

更新:我应该在我的数据库中添加什么,以便计算参加挑战的用户数量?

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

并让用户加入挑战。 您几乎可以使用 pivot 表做对。 您可以在 laravel 文档中查看多对多关系

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM