如何使用 Laravel 关系从数据库中获取父元素?

Posted

技术标签:

【中文标题】如何使用 Laravel 关系从数据库中获取父元素?【英文标题】:How to get parent element from database using Laravel relationship? 【发布时间】:2021-08-03 23:22:22 【问题描述】:

我想获得所有 SubCourse 家长。例如:我在数据库中有 html 课程,而 HTML 有 1 个子课程 HTML flex,我想获得 HTML flex 父级 HTML Course。

我试过了,但我得到了错误:

$subCourses = SubCourse::with('courses')->get()

Course.php

class Course extends Model

    use HasFactory;

    protected $fillable = [
        'title',
    ];

    public function sub_courses()
    
        return $this->hasMany(SubCourse::class);
    

SubCourse.php

class SubCourse extends Model

    use HasFactory;

    protected $fillable = [];

    public function courses()
    
        return $this->morphOne(Course::class, 'course_id');
    

课程迁移

 public function up()
    
        Schema::create('courses', function (Blueprint $table) 
            $table->id();
            $table->string('title');
        );
    

子课程迁移

public function up()

    Schema::create('sub_courses', function (Blueprint $table) 
        $table->id();
        $table->string('title');
        $table->foreignId('course_id')->constrained()->onDelete('cascade');
    );

解决办法是:

 return $this->belongsTo(Course::class, 'course_id');

【问题讨论】:

将子课程模型更改为return $this->belongsTo(Course::class); 我返回 null。 SubCourse::with('courses')->get() 是否在dd 上将course_id 返回为空? 是的,我在 tinker 中试过。 可能course_id 为空,请检查您的表 【参考方案1】:

通过将关系更改为子课程模型来试试这个

子课程.php

class SubCourse extends Model

    use HasFactory;

    protected $fillable = [];

    public function courses()
    
        return $this->belongsTo(Course::class,'course_id');
    

【讨论】:

这个返回null。

以上是关于如何使用 Laravel 关系从数据库中获取父元素?的主要内容,如果未能解决你的问题,请参考以下文章

在laravel中按模型从数据库中获取数据时如何附加关系

从关系中获取数据,Laravel

Laravel 从关系表中获取数据

Laravel 雄辩模型如何从关系表中获取数据

如何从每个父模型中获取 N 条记录?在 laravel 中雄辩

Laravel:如何从具有关系的 3 个表中获取数据