我有三张桌子:
类别(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');
}
}
我认为你不需要有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();
});
然后你可以使用这个代码:
用户-
您在这里有许多对许多的关系用户
和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(多对多数据透视表)属于收费。 我如何在雄辩的模型中定义第三种关系? 我希望能够获得如下(或类似)的“账户代理”费用: 谢谢,希望我的问题很清楚。