【发布时间】:2020-05-24 11:20:03
【问题描述】:
我是 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
我想要实现的是显示用户的挑战,例如,如果用户在用户仪表板中加入挑战,我想显示他加入的挑战,以及用户创建的挑战(如果他创造了任何);
Models\User.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');
}
}
模型\Challenge.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);
}
}
这是我目前在“我的仪表板”中为“已加入挑战”获得的信息 - 但是如何在返回视图时加入表格,以便还可以获得挑战主题标签标题?就像我在“我的挑战”部分下得到的一样? Dashboard
更新: 我应该在我的数据库中添加什么,以便统计参加挑战的用户数量?
【问题讨论】:
-
我认为Many to Many relationship 是您正在寻找的,用于链接用户和他们加入的挑战。这将帮助您解决当前面临的两个问题
-
为 $user->challenges 和 $user->userChallenges 选择 id,创建一个包含所有 id 的数组,去除重复项,重新查询 DB whereIn(unique ids)。
-
@nikistag 你能给我一个代码吗?
-
@ArunAS 是的,我知道这是多对多关系,我只是不知道如何实现它
标签: php mysql laravel eloquent