【问题标题】:Laravel Eloquent relationship (3 tables)Laravel Eloquent 关系(3 表)
【发布时间】:2021-05-06 22:14:15
【问题描述】:

我在一个数据库中有 3 个表
1.音量:id,音量,数字,...
2.论文:id,volume_id,title,...
3.Editor_name:id,idP(论文ID),name...
“Papers”表的“volume_id”列来自“Volume”,“Editor_name”的“idP”列连接到“Papers”表的“id”列。

我不知道使用哪种方法(hasMany 或 hasManyThrough)以及如何在控制器中定义函数(VolumeController)。
我有 3 个模型(卷、论文、名称)
卷模型

  public function names()
{
    return $this->hasManyThrough(Names::class, Papers::class,'volume_id','idP','id','id',);
}

或:
体积模型

public function papers()
{
    return $this->hasMany(Papers::class,'volume_id');
}

论文模型

public function volume()
{
    return $this->belongsTo(Volume::class,'volume_id');
}
public function names()
{
    return $this->hasMany(EditorName::class,'idP');
}

命名模型

  public function papers()
{
    return $this->belongsTo(Papers::class,'idP');
}

我想要什么:
URI /volume/1/1
第 1 卷编号 1
标题 1
编辑器 1 编辑器 2 编辑器 3
标题 2
编辑器 4 编辑器 5
标题 3
编辑器 6 编辑器 7 编辑器 8 ...
URI /volume/1/2
第 1 卷第 2 卷
标题 4
编辑器 9 编辑器 10 编辑器 11
标题 5
编辑器 12

音量控制器

 public function papers($id){
    $papers = Papers::all()->where('volume_id',$id);      
    return view('volume_ID',compact('papers'));

}

【问题讨论】:

  • 你想从Volume模型中实现所有Editor_name
  • 只有 Editor_name->name
  • 那你需要hasManyThrough(),我查过了。不要发现任何错误。你得到什么错误?
  • 不知道如何定义控制器和刀片。
  • 这样$volume = Volume::with('names')->get();

标签: model controller laravel-blade laravel-8 eloquent-relationship


【解决方案1】:

体积模型:

public function names()
{
    return $this->hasManyThrough(Names::class, Papers::class,'volume_id','idP','id','id',);
}

public function papers()
{
    return $this->hasMany(Papers::class,'volume_id');
}

在控制器中:

$id = 1;
$q = Volume::with('names', 'papers')->findOrFail($id);

刀片:

Volume : {{ $q->volume }}
Number : {{ $q->number }}

@foreach($q->papers as $paper)
   Paper Title : {{ $paper->title }}
@endforeach

@foreach($q->names as $name)
   Name : {{ $name->name }}
@endforeach

【讨论】:

    猜你喜欢
    • 2016-04-14
    • 1970-01-01
    • 2018-10-08
    • 1970-01-01
    • 1970-01-01
    • 2015-01-01
    • 2021-05-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多