我有一个模型Question
属于模型Exam
。Exam
可以有许多问题(一对多关系)。存储数据没有问题,但是当我尝试用Exam::find($exam->id)->questions;
获取考试的问题时,我得到的是NULL
。我有dd
的结果为Exam::find($exam->id)
和关系是空的:#relations: []
。
以下是我注册Question
模型的方式:
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
class Question extends Model
{
public $timestamps = false;
protected $fillable = ['question', 'correct_answer', 'category_id', 'type'];
public function questionCategory():belongsTo {
return $this->belongsTo(QuestionCategory::class);
}
public function exam(): BelongsTo {
return $this->belongsTo(Exam::class);
}
}
以下是Exam
模型:
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasMany;
class Exam extends Model
{
public $timestamps = false;
protected $fillable = ['name'];
public function question(): HasMany
{
return $this->hasMany(Question::class);
}
}
下面是迁移文件中问题表的DB模式:
Schema::create('questions', static function (Blueprint $table) {
$table->id();
$table->string('question');
$table->integer('correct_answer')->nullable();
$table->integer('question_category_id')->default(1);
$table->integer('exam_id');
$table->string('type')->default('text');
});
这也是我如何保存问题的数据:
$request->validate([
'examId' => ['required', 'numeric'],
'questions' => 'required'
]);
$exam = Exam::find($request->input('examId'));
$questions = $request->input('questions');
foreach ($questions as &$question_entry) {
// create the question if it doesn't exist
if ((int)$question_entry['id'] === 0) {
$question = new Question();
} else {
$question = Question::find($question_entry['id']);
}
$question->exam_id = $exam->id;
$question->question = $question_entry['body'];
$question->type = $question_entry['type'];
$question->question_category_id = $question_entry['category'];
$question->save();
}
保存到数据库是成功的,我可以看到数据库中的条目。如果我尝试做一些像Question::where('exam_id',1)->get()
的事情,我会从考试中得到问题,但我不明白为什么当我尝试从父模型中得到结果时(比如Exam::find(1)->questions) I get
NULL`)。似乎这两种模式之间没有任何关系。
我正在使用Laravel 10与宅基地和Breeze。
1条答案
按热度按时间4smxwvx51#
在
Exam
模型的关系定义中使用了单数question
。这可能就是为什么它是空的原因。你是否也尝试了复数
questions
,像这样:其余的代码看起来很好,但你也可以像这样创建外部id:
您可以在文档中阅读有关外键的更多信息