在Laravel 5.4中,我正试图建立多对多关系。但belongsToMany返回空!这是我的迁移和模型。
botusers 表:
public function up()
{
Schema::create('botusers', function (Blueprint $table) {
$table->increments('id');
$table->integer('t_id');
$table->string('first_name');
$table->string('last_name');
$table->string('username');
$table->string('mobile');
$table->timestamps();
});
}
候选人表:
public function up()
{
Schema::create('candidates', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('token');
$table->string('degree');
$table->integer('age');
$table->text('desc');
$table->string('photo_url');
$table->string('cv_url');
$table->timestamps();
});
}
第三个表, botuser_candidate 表:
public function up()
{
Schema::create('botuser_candidate', function (Blueprint $table) {
$table->integer('botuser_id');
$table->integer('candidate_id');
});
}
和 Botuser 模型中的votes()
方法:
public function votes()
{
return $this->belongsToMany(Candidate::class)->get();
}
当我触发时,votes()
方法返回一个空数组。我也测试了波纹管方法,
public function votes()
{
return $this->belongsToMany(Candidate::class,'botuser_candidate','botuser_id','candidate_id')->get();
}
我错过了什么?我该怎么办?
修改 我还在关系中添加了外键,但结果仍然相同!
答案 0 :(得分:1)
我建议你删除belongsToMany上的get()方法
然后使用
查询数据库$c=new App\Candidate;
$c->with('votes')->get()
如果您仍想使用$c->votes()
,则必须对功能进行一些更改。让我们使用范围来实现它。
public function candidates()
{
return $this->belongsToMany(Candidate::class,'botuser_candidate','botuser_id','candidate_id');
}
public function scopeVotes($query)
{
return $query->with("candidates")->get();
}
然后现在我们可以致电$v->votes()
,它应该返回您的所有记录。
直接在belongsToMany方法上调用get()将返回空数组。