Laravel Eloquent 关系(5 表)
Laravel Eloquent relationship (5 tables)
我在数据库中有 5 个表
- Volume: id, volume, number,...
- 论文: id,volume_id,title,...
- Editor_name: id,idP(论文ID),name...
- 邮箱: id, idA(Editor_name_id), 邮箱
- 机构: id, idA(Editor_name_id), 机构
而且我需要在一个 blade.
中显示有关文章的所有信息(来自所有表的数据)
例子
网址:papers/{paper_id}
第 1 卷第 1 期
标题 1
Editor_name1,电子邮件 1,电子邮件 2,机构 1
Editor_name2,电子邮件 3,机构 2,机构 3
...
迁移:
音量:
Schema::create('volume', function (Blueprint $table) {
$table->bigIncrements('id');
$table->integer("volume");
$table->integer("number");
$table->timestamps();
});
论文:
Schema::create('papers', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string("title");
$table->integer("volume_id");
$table->foreign('volume_id')->references('id')->on('volume')->onDelete('cascade');
$table->timestamps();
Editor_name:
Schema::create('editor_name', function (Blueprint $table) {
$table->id();
$table->integer("idP");
$table->string("name");
$table->timestamps();
$table->foreign('idP')->references('id')->on('papers')->onDelete('cascade');
});
邮箱:
Schema::create('email', function (Blueprint $table) {
$table->bigIncrements('id');
$table->integer("idA");
$table->string("email");
$table->timestamps();
$table->foreign('idA')->references('id')->on('editor_name')->onDelete('cascade');;
});
机构:
Schema::create('institution', function (Blueprint $table) {
$table->bigIncrements('id');
$table->integer("idA");
$table->string("institution");
$table->timestamps();
$table->foreign('idA')->references('id')->on('editor_name')->onDelete('cascade');
});
型号:
音量:
public function names()
{
return $this->hasManyThrough(Names::class, Papers::class,'issue','idP','id','id',);
}
public function papers()
{
return $this->hasMany(Papers::class,'issue');
}
论文:
public function volume()
{
return $this->belongsTo(Volume::class,'issue');
}
public function names()
{
return $this->hasMany(EditorName::class,'idP');
}
姓名:
public function papers()
{
return $this->belongsTo(Papers::class,'idP');
}
public function email()
{
return $this->hasMany(Email::class,'idA');
}
public function institution()
{
return $this->hasMany(Institution::class,'idA');
}
邮箱:
public function names()
{
return $this->belongsTo(Names::class,'idA');
}
机构:
public function names()
{
return $this->belongsTo(Names::class,'idA');
}
您可以这样获取所有信息:
public function show($paper_id) {
$data = Papers::with('volume', 'names', 'names.email', 'names.institution')->findOrFail($paper_id);
dd($data);
}
我在数据库中有 5 个表
- Volume: id, volume, number,...
- 论文: id,volume_id,title,...
- Editor_name: id,idP(论文ID),name...
- 邮箱: id, idA(Editor_name_id), 邮箱
- 机构: id, idA(Editor_name_id), 机构
而且我需要在一个 blade.
中显示有关文章的所有信息(来自所有表的数据)
例子
网址:papers/{paper_id}
第 1 卷第 1 期
标题 1
Editor_name1,电子邮件 1,电子邮件 2,机构 1
Editor_name2,电子邮件 3,机构 2,机构 3
...
迁移:
音量:
Schema::create('volume', function (Blueprint $table) {
$table->bigIncrements('id');
$table->integer("volume");
$table->integer("number");
$table->timestamps();
});
论文:
Schema::create('papers', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string("title");
$table->integer("volume_id");
$table->foreign('volume_id')->references('id')->on('volume')->onDelete('cascade');
$table->timestamps();
Editor_name:
Schema::create('editor_name', function (Blueprint $table) {
$table->id();
$table->integer("idP");
$table->string("name");
$table->timestamps();
$table->foreign('idP')->references('id')->on('papers')->onDelete('cascade');
});
邮箱:
Schema::create('email', function (Blueprint $table) {
$table->bigIncrements('id');
$table->integer("idA");
$table->string("email");
$table->timestamps();
$table->foreign('idA')->references('id')->on('editor_name')->onDelete('cascade');;
});
机构:
Schema::create('institution', function (Blueprint $table) {
$table->bigIncrements('id');
$table->integer("idA");
$table->string("institution");
$table->timestamps();
$table->foreign('idA')->references('id')->on('editor_name')->onDelete('cascade');
});
型号:
音量:
public function names()
{
return $this->hasManyThrough(Names::class, Papers::class,'issue','idP','id','id',);
}
public function papers()
{
return $this->hasMany(Papers::class,'issue');
}
论文:
public function volume()
{
return $this->belongsTo(Volume::class,'issue');
}
public function names()
{
return $this->hasMany(EditorName::class,'idP');
}
姓名:
public function papers()
{
return $this->belongsTo(Papers::class,'idP');
}
public function email()
{
return $this->hasMany(Email::class,'idA');
}
public function institution()
{
return $this->hasMany(Institution::class,'idA');
}
邮箱:
public function names()
{
return $this->belongsTo(Names::class,'idA');
}
机构:
public function names()
{
return $this->belongsTo(Names::class,'idA');
}
您可以这样获取所有信息:
public function show($paper_id) {
$data = Papers::with('volume', 'names', 'names.email', 'names.institution')->findOrFail($paper_id);
dd($data);
}