当前位置: 首页 > 知识库问答 >
问题:

Laravel与透视表的关系

夔高寒
2023-03-14

我有三张桌子:

类别(id、名称)

类别赛(类别赛id,锦标赛id)--

Category是可用类别列表Category_Tornament是管理员配置的类别列表Category_Tornament用户是用户已注册的类别

要获得锦标赛中的所有类别,我可以使用以下工具轻松完成:

    tournament->categories

在竞赛模型中定义归属关系

我不知道如何定义与上一个表的关系。

我需要的是用户单击几个类别,我可以运行如下操作:

    tournament->user_categories->sync($userCategories)

我应该在哪里同步表类别\锦标赛\用户(与类别\ id、锦标赛\ id、用户\ id)

实现这一目标的最佳方式是什么???

编辑:

模特大赛:

class Tournament extends Model
{

protected $table = 'tournament';
public $timestamps = true;

protected $fillable = [
    'name',
    'date',
    'type',

];


/**
 * A tournament is owned by a user
 *
 * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
 */
public function owner()
{
    return $this->belongsTo('App\User', 'user_id','id');
}

/**
 * @return \Illuminate\Database\Eloquent\Relations\HasMany
 */

public function categories()
{
    return $this->belongsToMany('App\Category')
                ->withTimestamps();
}

}

型号类别

class Category extends Model
{
protected $table = 'category';
public $timestamps = true;

protected $fillable = [
    'id',
    'name',
];


public function tournaments()
{
    return $this->belongsToMany('App\Tournament');
}
}

模型用户:

class User extends Model implements AuthenticatableContract,  CanResetPasswordContract
{
use Authenticatable, Authorizable, CanResetPassword, HasRole;

/**
 * The database table used by the model.
 *
 * @var string
 */
protected $table = 'users';

/**
 * The attributes that are mass assignable.
 *
 * @var array
 */
 protected $fillable = ['name','firstname','lastname','email', 'password','avatar',country_id','role_id',,'provider','provider_id','verified'];

/**
 * The attributes excluded from the model's JSON form.
 *
 * @var array
 */
protected $hidden = ['password', 'remember_token'];



/**
 * Boot the model.
 *
 * @return void
 */
public static function boot()
{
    parent::boot();
    static::creating(function ($user) {
        $user->token = str_random(30);
    });
}

public function role()
{
    return $this->belongsTo('App\Role');
}

public function settings()
{
    return $this->hasOne('App\Settings');
}

public function invites()
{
    return $this->hasMany('App\Invite', 'email','email');
}

public function country()
{
    return $this->belongsTo('Webpatser\Countries\Countries');
}

/**
 * A user can have many tournaments
 *
 * @return \Illuminate\Database\Eloquent\Relations\HasMany
 */
public function tournaments()
{
    return $this->hasMany('App\Tournament');
}


}

共有2个答案

籍星汉
2023-03-14

我认为你不需要有Category_Tournament_User表。你不能在Laravel中为它制作Model。你只需要一个表user_tournament。你应该在迁移,像这样:

Schema::create('user_tournament', function(Blueprint $table){
    $table->engine = 'InnoDB';
    $table->increments('id');
    $table->integer('user_id')->unsigned();
    $table->integer('tournament_id')->unsigned();
    $table->unique(['tournament_id', 'user_id']);//You can omit this
    $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade')->onUpdate('cascade');
    $table->foreign('tournament_id')->references('id')->on('tournaments')->onDelete('cascade')->onUpdate('cascade');
    $table->nullableTimestamps();
});

然后你可以使用这个代码:

用户-

子车文康
2023-03-14

您在这里有许多对许多的关系用户Category_Tournament,您应该在许多对许多中查看留档。

 类似资料:
  • 如果我尝试以下操作,则页面正在加载: 有以下表格:-用户-user_department-部门 数据透视表用户\u部门有两个外键:-部门\u id-用户\u id 在我的用户模型中: 在我的部门模型中: 顺便说一下:以下代码正在工作: 但是我无法在不破坏我的页面的情况下获得用户的部门。 有什么想法吗?

  • cart_items(id,user_id,product_id,store_id,quantity) 我的CartItem模型就像 当我调用时,我希望它返回产品数据返回匹配的数据透视表。

  • 我正在创建一个应用程序,其中用户可以被分配到多个组织,组织可以有多个用户--多对多的关系。 我希望能够这样做:以及 我有表... 我有表... 呃!用户-组织,组织-用户! 和我有数据透视/映射/等。表 表有一个字段和一个字段。 Elecoquent假设并期望-但这不是我为表命名的,也不想重命名。 我设置了以下内容 用户: 然后我测试一下: 并得到以下错误: SQLState[42S02]:找不到

  • 我试图创建一个关系,通过一个名为年级的模型访问一个名为注释的表,通过年级中的学生加载 年级模型和学生模型都属于其他模型 根据我的理解,不可能访问需要透视表的hasManyThrough关系(注释没有年级标识符,只有学生标识符) 我为Laravel 4@HasManyThrough找到了这些函数,它们具有一对多关系,但它给了我一个错误类“App\illumb\Database\Eloquent\Re

  • 我有表,和透视表。表只有两个字段和。 当我添加一个问题时,它还会将相应的值插入透视表。 假设我更改表单中的问题标记并保存,它应该更新透视表的值。如何更新透视表?我是拉威尔的新手。我试过类似的东西 但在我的例子中,pivot表中并没有额外的属性 问题模型 标签模型

  • 我想不出如何雄辩地处理这件事。我有一个多对多的关系,需要分配给它一对一的关系。 下面是我设计的最简单形式的基本数据库结构: 每个帐户都属于多个代理。 每个代理人都有许多账户。 每个Account_Agent(多对多数据透视表)属于收费。 我如何在雄辩的模型中定义第三种关系? 我希望能够获得如下(或类似)的“账户代理”费用: 谢谢,希望我的问题很清楚。