作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
嘿,stackoverflow
我目前正在构建一个类(class)应用程序作为我的 laravel 项目的一部分。
我的问题在于 eloquent 如何处理模型关系,我对 eloquent 还是有点陌生,所以希望你能回答我的问题。
结构
类(class)有很多集,每集有很多部分。
这意味着我在数据库中有 3 个表。 类(class) -> course_episodes -> course_episode_sections
ID 表是我与用户连接类(class)的地方 - course_users .
现在我可以创建类(class)并正确输入所有数据。
问题
我需要检索用户购买的所有类(class)及其嵌套的子类(class),这些类(class)连接在 中。 course_users 带列的表 course_id 和 user_id
类(class)结构
DB中的相同结构
course: {
name: null,
sub_title: null,
estimate: null,
trailer: null,
type: null,
text: null,
course_episodes: [
{
name: null,
section: [
{
order: null,
type: null,
content: null,
},
]
},
]
}
模特图片
class CourseUsers extends Model {
protected $fillable = [
'id',
'course_id',
'user_id',
'active',
];
protected $hidden = [
'deleted_at',
'updated_at',
'deleted_at'
];
public function courses()
{
return $this->belongsToMany(Course::class);
}
public function user(){
return $this->belongsTo(User::class);
}
public function scopeFindForUserId($query, $userId)
{
return $query->where(function ($q) use ($userId) {
$q->where(function ($q) use ($userId) {
$q->where('user_id', $userId);
});
});
}
类(class)模型
class Course extends Model{
protected $fillable = [
'id',
'name',
'sub_title',
'type',
'estimate',
'trailer',
'gateway_id',
'text',
'active',
];
protected $hidden = [
'deleted_at',
'updated_at',
'deleted_at'
];
public function courseEpisode()
{
return $this->hasMany(CourseEpisode::class);
}
public function courseUsers() {
return $this->hasMany(CourseUsers::class);
}
public function scopeActive(Builder $builder)
{
return $builder->where('active', true);
}
类(class)插曲模型
class CourseEpisode extends Model implements HasMedia {
use HasMediaTrait;
protected $fillable = [
'id',
'course_id',
'order',
'name',
];
protected $hidden = [
'deleted_at',
'updated_at',
'deleted_at'
];
public function course()
{
return $this->belongsTo(Course::class);
}
public function courseSection()
{
return $this->hasMany(CourseEpisodeSection::class);
}
类(class)剧集栏目
class CourseEpisodeSection extends Model {
protected $fillable = [
'id',
'course_episode_id',
'order',
'type',
'content'
];
protected $hidden = [
'deleted_at',
'updated_at',
'deleted_at'
];
public function courseEpisode()
{
return $this->belongsTo(CourseEpisode::class);
}
最佳答案
根据你的解释,course_users 表保存了 Course 和 User 模型之间的多对多关系。在多对多关系的情况下,您实际上不需要 CourseUser 模型。这种具有多对多关系的表称为数据透视表。从 Official Documentation 中了解更多信息
我只定义与您的 Course、User、CourseEpisode、CourseEpisodeSection 模型的关系。
类(class).php
class Course extends Model
{
public function courseEpisodes()
{
return $this->hasMany(CourseEpisode::class);
}
public function users()
{
return $this->belongsToMany(User::class,'course_users')->withPivot('active');
}
}
CourseEpisode.php
class CourseEpisode extends Model
{
public function courseSections()
{
return $this->hasMany(CourseSection::class);
}
}
用户名
class User
{
public function courses()
{
return $this->belongsToMany(Course::class,'course_users')->withPivot('active');
}
}
如果你想从一个用户那里得到所有的子关系,使用嵌套的
eager loading :
$user_with_nested_course_data = User::with('courses.courseEpisodes.courseSections')->find($id);
关于php - 有没有办法根据另一个表中的 id 获取嵌套的 Eloquent 模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65687713/
我是一名优秀的程序员,十分优秀!