Php 有没有办法从另一个表中获得基于ID的嵌套的雄辩模型?
嘿,这里是stackoverflow 我目前正在构建一个课程应用程序,作为我的laravel项目的一部分 我的问题在于雄辩如何处理模型关系,我对雄辩还是有点陌生,所以希望你能回答我的问题 结构 这门课程有很多集,每集都有很多部分 这意味着数据库中有3个表课程->课程集->课程集章节Php 有没有办法从另一个表中获得基于ID的嵌套的雄辩模型?,php,laravel,eloquent,Php,Laravel,Eloquent,嘿,这里是stackoverflow 我目前正在构建一个课程应用程序,作为我的laravel项目的一部分 我的问题在于雄辩如何处理模型关系,我对雄辩还是有点陌生,所以希望你能回答我的问题 结构 这门课程有很多集,每集都有很多部分 这意味着数据库中有3个表课程->课程集->课程集章节 class CourseEpisodeSection extends Model { protected $fillable = [ 'id', 'course_episode_id', '
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);
}
ID表是我将课程与用户连接的地方-课程\用户
现在我可以创建课程并正确地输入所有数据
问题
我需要检索用户购买的所有课程及其嵌套的子级,这些子级在课程用户表中连接,列为课程id和用户id
课程结构
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 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);
}
我现在的模特
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 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 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 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 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 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表包含课程和用户模型之间的多对多关系。在多对多关系中,实际上不需要CourseUser模型。这种包含多对多关系的表称为透视表。阅读更多来自 我仅定义与您的课程、用户、CourseEpisode、CourseEpisodeSection模型的关系 Course.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);
}
}
User.php
class User
{
public function courses()
{
return $this->belongsToMany(Course::class,'course_users')->withPivot('active');
}
}
如果要从用户获取所有子关系,请使用嵌套:
请发布问题中的代码,而不是链接。不要将数据库表/模型发布为图像。。。Stackoverflow支持表,否则代码为文本;复制并粘贴到问题中,格式正确。我们必须点击8个链接来查看您的问题是什么,这太多了。您可能应该考虑的一件事是模型的命名方案。您当前有一个名为
Course
和CourseEpisode
的模型,但还有一个名为courseuser
。模型应该是单数的。因此,如果我正确理解了这个问题,您希望获得所有与用户连接的课程
s和相关的CourseEpisode
s吗?我建议你看一下这本书。根据您的描述,您需要的一切都应该在那里。@YaakovAinspan是的,我想查看课程用户表,找到特定用户购买的所有课程。但是我需要在这个过程中得到所有的课程和嵌套的子课程。它是有效的!,非常感谢您的帮助和非常有启发性的回答。:-)