为了账号安全,请及时绑定邮箱和手机立即绑定

如何在laravel中通过急切加载从3个表中获取数据

如何在laravel中通过急切加载从3个表中获取数据

PHP
慕虎7371278 2021-10-22 16:51:26
我有一个这样的表关系Laravel框架关于急切加载特性的这个问题我的热切加载代码如下:$schedules = Schedule::whereHas(    'mahasiswa',    function($mahasiswa) use ($start, $limit, $order, $dir, $search) {        $mahasiswa->whereHas(            'document_thesises',            function($documentThesis) use ($start, $limit, $order, $dir, $search) {                $documentThesis->where('npm', 'LIKE', "%$search%")                    ->orWhere('name', 'LIKE', "%$search%")                    ->offset($start)                    ->limit($limit)                    ->orderBy($order, $dir);        });    })->get();对于上表中的模型,代码如下: Mahasiswa 模型:public function document_thesises(){    return $this->hasMany(DocumentThesis::class, 'id', 'document_thesis_id');}文献论文模型:public function mahasiswa(){    return $this->belongsTo(Mahasiswa::class);}时间表模型:public function mahasiswa(){    return $this->belongsTo(Mahasiswa::class, 'mahasiswa_id', 'id');}我希望结果可以根据schedule表格显示表格中的所有数据document_thesis。但是,我得到了这样的错误:exception: "Illuminate\Database\QueryException"file: "/mnt/d/www/eta/vendor/laravel/framework/src/Illuminate/Database/Connection.php"line: 664message: "SQLSTATE[42S22]: Column not found: 1054 Unknown column 'mahasiswas.document_thesis_id' in 'where clause' (SQL: select * from `schedules` where exists (select * from `mahasiswas` where `schedules`.`mahasiswa_id` = `mahasiswas`.`id` and exists (select * from `document_thesises` where `mahasiswas`.`document_thesis_id` = `document_thesises`.`id` order by `id` asc limit 10 offset 0) and `mahasiswas`.`deleted_at` is null))"trace: [,…]
查看完整描述

2 回答

?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

抛出此异常的原因是 的关系Mahasiswa@document_thesises不正确。正如我们所看到的,所需的关系是一对多的。在 Laravel 术语中,HasMany应该使用这种关系。


目前您的代码表明它是一个BelongsTo关系,它需要相关模型的本地外键。查询试图加入mahasiswas.document_thesis_id不存在的相关模型。


将关系方法更改为hasMany应该可以解决问题。


// Mahasiswa model

public function document_thesises()

{

    return $this->hasMany(DocumentThesis::class);

}


// DocumentThesis model

public function mahasiswa()

{

    return $this->belongsTo(Mahasiswa::class);

}


查看完整回答
反对 回复 2021-10-22
?
忽然笑

TA贡献1806条经验 获得超5个赞

将 Mahasiswa 模型中的 document_thesises 函数更改为


public function document_thesises()

    {

        return $this->hasMany(DocumentThesis::class, 'document_thesis_id','id');

    }


查看完整回答
反对 回复 2021-10-22
  • 2 回答
  • 0 关注
  • 144 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信