gpt4 book ai didi

php - 通过多对多关系的对象字段从数据库中获取对象

转载 作者:行者123 更新时间:2023-11-29 05:59:27 24 4
gpt4 key购买 nike

我正在为网络应用程序构建 API。我正在构建的自定义路由之一可用于从数据库中获取所有使用特定位置的数据集的报告。目前这条路线有点瓶颈,我正在努力加快速度。

一份报告可以包含多组数据。数据也可以属于多个报告。数据表包含来自另一个(外部)数据库的数据集的所有位置。

为了阐明我的数据库看起来像这样:

  Report              pivot table          Data
|-----------| |-----------| |-------------|
| Report_id |-------<| Report_id |>-------| Data_id |
| | | Data_id | | Location_id |
|-----------| |-----------| |-------------|

我已经编写了以下脚本来获取使用特定数据集的所有报告,但我觉得这样做可以更有效地完成。

 $reports = Report::whereIn('id',
\DB::table('report_data')->select('report_id')->whereIn('data_id',
\DB::table('data')->select('id')->where('location_id', '=', $id)
)
)->get();

我是否遗漏了一些明显的东西,或者这是最好的方法吗?

最佳答案

在模型中

数据.php

public function Report()
{
return $this->hasMany('App\Report');
}

报告.php

public function Data()
{
return $this->belongsToMany('App\Data');
}

(您还可以指定所有字段应该出现在选择查询中)并在 Controller 中

// To get reports which are having any data
$reports1 = Report::whereHas('Data',function($query) use($id){
$query->select('id');
$query->where('location_id',$id);
})->orderBy('id', 'desc')
->get();

// To get all reports

$reports2 = Report::with(array('Data'=>function($query)use($id){
$query->select('id');
$query->where('location_id',$id);
}))->orderBy('id', 'desc')
->get();

关于php - 通过多对多关系的对象字段从数据库中获取对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46296480/

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