【发布时间】:2016-04-30 18:19:45
【问题描述】:
我有一个User 和一个Quiz 模型。我通过以下方式在它们之间定义了多对多关系:
用户模型
public function subscriptions()
{
return $this->belongsToMany(Quiz::class, 'subs_users', 'user_id', 'quiz_id')->withTimestamps()->withPivot('accepted');
}
测验模型
public function subscribers()
{
return $this->belongsToMany(User::class);
}
数据透视表
Schema::create('subs_users', function (Blueprint $table) {
$table->integer('user_id')->unsigned();
$table->integer('quiz_id')->unsigned();
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
$table->foreign('quiz_id')->references('id')->on('quizzes')->onDelete('cascade');
$table->primary(['user_id', 'quiz_id']);
$table->boolean('accepted')->index();
$table->timestamps();
});
当我调用$quiz->subscribers 时,它会按预期返回一组用户。但是,$user->subscriptions 总是返回一个空数组。这是为什么呢?
编辑
看来,替换Quiz中的这一行
return $this->belongsToMany(User::class);
与
return $this->belongsToMany(User::class, 'subs_users', 'quiz_id', 'user_id')->withTimestamps()->withPivot('accepted');
解决了这个问题,但我仍然不明白为什么第一个变体不起作用。
【问题讨论】:
-
能否提供数据库结构
-
@sef4eg 我添加了其他表格
标签: laravel laravel-5 eloquent laravel-5.2