gpt4 book ai didi

php - 有没有办法根据另一个表中的 id 获取嵌套的 Eloquent 模型?

转载 作者:行者123 更新时间:2023-12-04 08:16:16 26 4
gpt4 key购买 nike

嘿,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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com