【问题标题】:Laravel Eloquent relationship (5 tables)Laravel Eloquent 关系(5 表)
【发布时间】:2021-05-09 01:48:46
【问题描述】:

我在一个数据库中有 5 个表

  1. 音量:id、音量、数字……
  2. 论文:id,volume_id,title,...
  3. Editor_name:id,idP(Papers ID),name...
  4. 电子邮件:id、idA(Editor_name_id)、电子邮件
  5. 机构:id、idA(Editor_name_id)、机构

我需要在一个刀片中显示有关文章的所有信息(所有表中的数据)。
示例
网址: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();

编辑名称:

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');
}

【问题讨论】:

  • 这似乎是一个非常简单的请求。你有没有努力自己解决这个问题?你了解 Eloquent 关系的基础知识吗?

标签: php laravel eloquent model laravel-8


【解决方案1】:

您可以通过这种方式获取所有信息:

public function show($paper_id) {

     $data = Papers::with('volume', 'names', 'names.email', 'names.institution')->findOrFail($paper_id);

     dd($data);
}

【讨论】:

    猜你喜欢
    • 2021-01-14
    • 2015-04-16
    • 2016-08-16
    • 1970-01-01
    • 2015-01-01
    • 2021-05-06
    • 2016-11-19
    • 2018-05-03
    • 1970-01-01
    相关资源
    最近更新 更多