Php 方法未找到laravel模型

Php 方法未找到laravel模型,php,laravel,eloquent,Php,Laravel,Eloquent,我有两种型号,JadwalTerapisKlinik和PesertaKlinik 我尝试使用以下代码调用数据: $data = JadwalTerapisKlinik::whereHas('pesertaKlinik', function($q){ $q->whereHas('timeControlling', function($qq){ $qq->where('status', 'done');

我有两种型号,JadwalTerapisKlinik和PesertaKlinik

我尝试使用以下代码调用数据:

$data = JadwalTerapisKlinik::whereHas('pesertaKlinik', function($q){
                $q->whereHas('timeControlling', function($qq){
                    $qq->where('status', 'done');
                });
            })->with(['pesertaKlinik' => function($q){
                $q->with(['timeControlling' => function($qq){
                    $qq->where('status', 'done');
                }]);
            }])->orderBy('tanggal', 'desc')->get();
    $data = $data->pesertaKlinik()->paginate(10);
但结果是“pesertaKlinik方法不存在。”

这是JadwalTerapisKlinik模型中的pesertaKlinik方法:

public function pesertaKlinik(){
    return $this->hasMany(PesertaKlinik::class, 'jadwal_terapis_id');
}
但是当我在第一个查询中使用
find(1)
而不是
get()
时,它的工作状态很好


结构模型:JadwAlterapi有多个PesertaKlinik,PesertaKlinik有一次控制


我的代码怎么了?提前谢谢。

构建器上的
get
调用将返回模型集合,而不是单个模型实例。集合没有
pesertaKlinik
方法


也许您正在寻找生成器上的
first
方法来返回单个模型实例或null,而不是
get
方法。

您应该只使用
get()=>来执行查询
paginate()=>来执行查询并对结果进行分页
。不是两个都被锁着


您可以始终使用命令
toSql()
代替
get()。同时,我认为您可以通过将关系嵌套到
中,以更简单的方式查询
JadwalTerapisKlinik
模型,如下所示:

$data = JadwalTerapisKlinik::whereHas('pesertaKlinik.timeControlling', function($q){
            $q->where('status', 'done');
        })->orderBy('tanggal', 'desc')->paginate(10);  // instead of get(), call your paginate() method here
$data = JadwalTerapisKlinik::whereHas('pesertaKlinik.timeControlling', function($q){
            $q->where('status', 'done');
        })->with(['pesertaKlinik.timeControlling' => function($q){
            $q->where('status', 'done');
        }])->orderBy('tanggal', 'desc')->paginate(10);
现在类似地,您的急切加载的关系与上述查询类似,如下所示:

$data = JadwalTerapisKlinik::whereHas('pesertaKlinik.timeControlling', function($q){
            $q->where('status', 'done');
        })->orderBy('tanggal', 'desc')->paginate(10);  // instead of get(), call your paginate() method here
$data = JadwalTerapisKlinik::whereHas('pesertaKlinik.timeControlling', function($q){
            $q->where('status', 'done');
        })->with(['pesertaKlinik.timeControlling' => function($q){
            $q->where('status', 'done');
        }])->orderBy('tanggal', 'desc')->paginate(10);
$data
变量现在包含一组
JadwalTerapisKlinik
模型,这些模型通过
whereHas
具有指定的约束,以及与
具有
的急切加载关系

因此,为了能够迭代集合及其数据,您肯定需要一个循环(在控制器代码或视图中):


请添加您的模型的结构
JadwalTerapisKlinik
pesertaKlinik
,以及
timeControlling
。结构模型:jadwalterapi有许多pesertaKlinik,PesertaKlinik有一个时间控制。JadwalTerapisKlinik的模式中的
tanggal
列是吗?检查我的答案是否有帮助。实际上我想通过
JadwalTerapis
中的
tanggal
列按顺序获取所有时间控制和PesertaKlinik数据。我已被删除
get()
仍然会得到错误结果
调用undefined方法
谢谢你的回答,我想要的是调用所有数据
pesertaKlinik
,在
JadwalTerapisKlinik
中使用orderBy列
tanggal
。我需要一个简单的代码,但我找不到。所以我使用这个
PesertaKlinik::join('jadwal_terapis','peserta_klinik.jadwal_terapis_id','=','jadwal_terapis.id')->orderBy('jadwal_terapis.tanggal','desc')->分页(15)谢谢你试着帮助我:)不客气,但请随时查看雄辩的力量。