Laravel 5.4 belongsToMany关系返回空

时间:2017-04-03 14:55:28

标签: laravel laravel-5 eloquent

在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();
}

我错过了什么?我该怎么办?

修改 我还在关系中添加了外键,但结果仍然相同!

1 个答案:

答案 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()将返回空数组。