我正在建立一个项目,用户可以在其中创建一个事件并加入许多事件, 该活动只有一个所有者,但可以加入许多用户
这是Model Event.php中的方法
public function creator()
{
return $this->belongsTo(User::class);
}
public function users()
{
return $this->belongsToMany(User::class);
}
这里是User.php模型中的方法
public function createdEvents()
{
return $this->belongsTo(User::class);
}
public function joinedEvents()
{
return $this->belongsToMany(Event::class);
}
这是数据透视表迁移文件
class CreateEventUserTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('event_user', function (Blueprint $table) {
$table->unsignedInteger('event_id');
$table->unsignedInteger('user_id');
$table->timestamps();
$table->primary(['event_id', 'user_id']);
$table->foreign('event_id')
->references('id')->on('events')
->onDelete('cascade');
$table->foreign('user_id')
->references('id')->on('users')
->onDelete('cascade');
});
}
这是事件迁移
public function up()
{
Schema::create('events', function (Blueprint $table) {
$table->increments('id');
$table->unsignedInteger('user_id');
$table->text('content');
$table->date('date');
$table->time('time');
$table->unsignedSmallInteger('min_attendance');
$table->unsignedSmallInteger('max_attendance');
$table->string('location');
$table->unsignedInteger('category_id');
$table->timestamps();
$table->foreign('user_id')
->references('id')->on('users')
->onDelete('cascade');
});
}
我想知道我做错了什么地方或是否有问题,以避免将来使用Laravel Eloquent检索数据时出现问题
答案 0 :(得分:1)
您需要更新用户模型。 createdEvents的关系需要像这样:
public function createdEvents()
{
return $this->hasMany(Event::class);
}
答案 1 :(得分:0)
我认为您应该在事件模型中仅保持这样一种关系:
public function user()
{
return $this->belongsTo(User::class);
}
您的用户模型如下:
public function events()
{
return $this->belongsToMany(Event::class);
}
您可以使用第三个名为Subscription
的模型,然后在事件和用户之间建立关系表
public function up()
{
Schema::create('subscriptions', function (Blueprint $table) {
$table->increments('id');
$table->unsignedInteger('user_id');
$table->unsignedInteger('event_id');
$table->timestamps();
$table->foreign('user_id')
->references('id')->on('users')
->onDelete('cascade');
$table->foreign('event_id')
->references('id')->on('events')
->onDelete('cascade');
});
}
最后是订阅模型:
public function users()
{
return $this->belongsToMany(User::class);
}
public function event()
{
return $this->belongsTo(Event::class);
}
通过这种方式,您可以使用以下查询访问所有加入您活动的用户:
$joinedUsers = Subscription::where('event_id','=','$id')->pluck('user_id');