【发布时间】:2019-07-29 11:07:13
【问题描述】:
我正在尝试使用 laravel 多对多关系获取结果,但查询生成错误,因此它返回空数组。
$user->survey()->get() 返回空数组。$user->survey()->toSql() 返回错误查询:
SELECT
*
FROM
`survey`
INNER JOIN `survey_user` ON `survey`.`id` = `survey_user`.`survey_id`
WHERE
`survey_user`.`user_id` IS NULL
这里,最终user_id不应该为null。
调查数据透视表的迁移:
Schema::create('survey_user', function (Blueprint $table) {
$table->increments('id');
$table->integer('user_id')->unsigned();
$table->integer('survey_id')->unsigned();
$table->string('status', 50)->nullable();
$table->timestamps();
});
Schema::table('survey_user', function (Blueprint $table) {
$table->foreign('user_id')->on('users')->references('id');
$table->foreign('survey_id')->references('id')->on('survey')
->onDelete('cascade')
->onUpdate('cascade');
});
}
这是两个关系:
public function survey()
{
return $this->belongsToMany(Survey::class, 'survey_user')
->withPivot('status')
->withTimestamps();
}
public function user()
{
return $this->belongsToMany(User::class, 'survey_user')
->withPivot('status')
->withTimestamps();
}
我只是想让所有在他们的数据透视表中分配了调查的用户。
$user = new User();
var_dump($user->survey()->get());
【问题讨论】:
-
能否在您的问题中添加更多代码?
-
可能取决于调用方法的顺序,试试这个
$table->foreign('user_id')->references('id')->on('users'); -
@potiev 不,不幸的是,事实并非如此。我更改了迁移仍然是相同的问题
-
很明显它在查询中有null,你初始化了一个没有ID的用户? new User() 不会将一个保存到数据库中
-
为什么你觉得
$user->survey()->toSql()返回了错误的查询?你确定数据库中有数据吗?