如何在 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');

    }

}

这是我的家庭控制器中的内容: 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);

    }

}

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

更新:我应该将什么添加到我的数据库中,以便我可以计算已加入挑战的用户数量?


喵喔喔
浏览 99回答 1
1回答

当年话下

为了获得用户创建的挑战,我相信您已经正确地做到了。并让用户加入挑战。您几乎可以正确使用数据透视表。您可以在 laravel 文档中查看多对多关系。这些是用于检索用户创建的挑战和用户加入的挑战的示例代码。这些代码应该驻留在您的用户模型中,您应该保留该模型。public function created_challenges(){&nbsp; &nbsp; return $this->hasMany(Challenge::class,'user_id','id');}public function joined_challenges(){&nbsp; &nbsp; &nbsp;return $this->belongsToMany(Challenges::class, 'user_challenges', 'user_id', 'challenges_id');}一旦关系正常工作,您就可以简单地使用从关系返回的集合。将 传递$user->joined_challenges给视图后,您可以执行以下操作@foreach ($joined_challenges as $challenge)&nbsp; &nbsp; <p>{{$challenge->hashtag}}</p>&nbsp; &nbsp;&nbsp; &nbsp; <p>{{$challenge->title}}</p>&nbsp; &nbsp;@endforeach让我知道这行得通,干杯!;)
打开App,查看更多内容
随时随地看视频慕课网APP