Laravel 多级关系
Posted
技术标签:
【中文标题】Laravel 多级关系【英文标题】:Laravel multi level relationship 【发布时间】:2022-01-01 03:50:00 【问题描述】:我想创建显示 class_meets 信息的视图 有关其他信息,我想显示表主题中的主题名称 已经在尝试 hasOneTrough、hasManyTrough 和 belongsToMany 但这就像函数只显示从主题到 class_meets,而我需要的是相反的
想在 ClassMeet 模型上添加一些功能
这是我的清单模型:
主题class Subject extends Model
use SoftDeletes;
public $table = 'subjects';
protected $dates = ['created_at', 'updated_at', 'deleted_at'];
protected $fillable = [
'subject_name'
];
常规
class Routine extends Model
use SoftDeletes;
public $table = 'routines';
protected $dates = ['created_at', 'updated_at', 'deleted_at'];
protected $fillable = [
'academic_year_id',
'subject_id',
'classes_id'
'day',
'start_time',
'end_time',
];
课堂聚会
class ClassMeet extends Model
use SoftDeletes;
public $table = 'class_meets';
protected $dates = ['created_at', 'updated_at', 'deleted_at', 'date'];
protected $fillable = [
'routine_id',
'date'
];
【问题讨论】:
【参考方案1】:hasOneTrough,hasManyTrough 在这种情况下不起作用。
你需要添加belongsTo关系到ClassMeet,Routine。
class ClassMeet extends Model
use SoftDeletes;
public $table = 'class_meets';
protected $dates = ['created_at', 'updated_at', 'deleted_at', 'date'];
protected $fillable = [
'routine_id',
'date'
];
public routine()
return $this->belongsTo('App\Routine','routine_id','id')
例程模型是这样的
class Routine extends Model
use SoftDeletes;
public $table = 'routines';
protected $dates = ['created_at', 'updated_at', 'deleted_at'];
protected $fillable = [
'academic_year_id',
'subject_id',
'classes_id'
'day',
'start_time',
'end_time',
];
public subject()
return $this->belongsTo('App\Subject','subject_id','id')
现在你可以通过例程获得主题了。
ClassMeet::with('routine.subject')->get();
【讨论】:
以上是关于Laravel 多级关系的主要内容,如果未能解决你的问题,请参考以下文章
尝试从子模型重新访问父模型的 laravel 多级关系急切加载问题
Laravel Eloquent 中的多级深度 hasMany 关系