0

我有 3 张桌子

  1. 用户(id、姓名、邮件、手机)
  2. 比赛(id,contest_name,contest_description)
  3. 竞赛用户 (id,user_id,contest_id)

我想在竞赛模型中编写一个有很多竞赛用户的方法,我还需要该方法中的用户详细信息。请告诉我如何获得所需的结果。

模型截图

<?php

namespace App\Model\Contest;

use App\Model\Project\ContestUsers;
use Illuminate\Database\Eloquent\Model;

class Contest extends Model
{
    protected $table = 'contest';

    protected $fillable = ['name','description'];
    public $dates = [
        'created_at',
        'updated_at',
        'deleted_at',
    ];

    //I want to get user details from this method
    public function project_contest_users()
    {
        return $this->hasMany(ContestUsers::class, 'contest_id', 'id')->whereNull('deleted_at');
    }
}
4

2 回答 2

0

contest_user是一个数据透视表users并且contests不应该有一个模型类。

User 和 Contest 之间的关系本质是多对多的,所以你需要belongsToMany()在双方都使用关系

比赛.php

public function users()
{
    return $this->belongsToMany(User::class);
}

用户.php

public function contests()
{
    return $this->belongsToMany(Contest::class);
}
于 2021-09-29T08:40:47.743 回答
0

从你所做的,根据我的经验,你将多对多关系正常化已经是一件好事。但是 N69S 所说的也是正确的,数据透视表不应该有 Model 类,所以你需要制定自己的约定,不使用 Model 类来创建/更新/删除(我可以阅读),如果你仍然想要要坚持这种方法,您现在需要做的只是定义每个模型的关系。

用户.php:

public function contest_user()
{
    return $this->hasMany(ContestUser::class);
}

竞赛用户.php:

public function user()
{
    return $this->belongsTo(User::class);
}

public function contest()
{
    return $this->belongsTo(Contest::class);
}

比赛.php:

public function contest_user()
{
    return $this->hasMany(ContestUser::class);
}
于 2021-10-14T02:55:42.027 回答