我尝试在Laravel Eloquent中建立一对多的关系,问题是我不能把一个问题和它的protectionclass放在一起,例如Question::with(protectionclass)->get();
This只返回问题。我有问题,也有对应的protectionclass。一个问题Map到一个protectionclass,一个protectionclass可以有很多问题。代码也存储在git中,带有一个db seeder:我使用的是Laravel 10.1.5,带有Jetstream,vuejs,tailwindcss和Inertia。但是问题出在Laravel内部。
这两个模型是:
class ProtectionClass extends Model
{
use HasFactory;
protected $table = 'protectionclasses';
protected $attributes = [
'name' => '',
];
protected $fillable = [
'name',
];
public function questions(){
return $this->hasMany(Question::class, 'protectionclass_id');
}
}
以及
class Question extends Model
{
use HasFactory;
protected $fillable = [
'protectionclass_id',
'question',
'weight',
];
protected $attributes = [
'protectionclass_id' => 1,
];
public function protectionclass(){
return $this->belongsTo(ProtectionClass::class, 'protectionclass_id');
}
}
迁移包括:
public function up()
{
Schema::create('protectionclasses', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->timestamps();
});
}
以及
public function up()
{
Schema::create('questions', function (Blueprint $table) {
$table->id();
$table->unsignedBigInteger('protectionclass_id');
$table->string('question');
$table->integer('weight')->default(1);
$table->foreign('protectionclass_id')->references('id')->on('protectionclasses');
$table->timestamps();
});
}
这是工作正常,但返回的保护类只:Question::find(1)->protectionclass;
有人知道吗?我已经挣扎了好几个小时了...非常感谢!
向你问好,约翰尼斯
当我调用$questions = Question::with('protectionclass')->get();
时,我会得到所有的问题,但没有相应的protectionclass。我希望有它与protectionclass。
1条答案
按热度按时间wydwbb8l1#
with()
方法以急切加载格式提供信息,也就是说,它已经在对象示例中预加载了关系。此预加载存储在通过模型对关系的访问中:
$question->protectionclass
,它将给予您访问其父项的权限。$protectionclass->questions
的相反大小写将授予您访问它所拥有的项集合的权限。我希望它能被保护。
您已经可以访问protectionClass数据,因此
$question->protectionclass->name;
如果关系实际上存在于已填充的数据库中,并且在调用关系时没有返回任何内容,请检查模型中关系函数中的键: