php - 如何从模型调用结果数据库查询到 API 控制器 Laravel
问题描述
我在调用 2 模型的 API 控制器(FormController.php)中有这个查询,它们是一对多相关的。
public function getFormD($electionId, $model, $wilayahId)
{
$result = FormDImageDetail::with('formd_image')
->where('jenis_pemilihan', $electionId)
->where('jenis_form', $model)
->where('id_wilayah', $wilayahId)
->where('versi', function($query) use($electionId) {
$query->select(DB::raw('max(versi)'))
->from('formd_image')
->whereColumn('id_wilayah', 'formd_image_detail.id_wilayah')
->where('flag_aktif', true)
->where('jenis_pemilihan', $electionId);
})
->orderBy('no_lembar')
->paginate(100);
return $result;
}
第一个模型 (FormDImage.php)
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class FormDImage extends Model
{
protected $table = 'formd_image';
}
我的第二个模型(FormDImageDetail.php)
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class FormDImageDetail extends Model
{
protected $table = 'formd_image_detail';
public function formd_image(){
return $this->belongsTo('App\Models\FormDImage', 'id_wilayah', 'id_wilayah');
}
}
现在我想将查询 SQL 从 API 控制器移动到模型并使用 DB::Raw SQL 然后在这个 API 控制器中调用它。
我应该怎么做?
解决方案
正确的方法是将您的业务逻辑和其他功能像您所做的那样放在您的控制器中。为什么需要将 SQL 移动到模型中。模型是与数据库和您的应用程序的关系。如果要封装查询,请尝试使用存储库模式。此链接将对您有所帮助。
https://bosnadev.com/2015/03/07/using-repository-pattern-in-laravel-5/#Criteria_Queries
https://medium.com/employbl/use-the-repository-design-pattern-in-a-laravel-application-13f0b46a3dce
推荐阅读
- javascript - Chart.js Stacked Bar - 数据集的可见性和排序
- java - JUnit 5 和 Mockito
- php - PHP Soap 问题:OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 54 or SSL: Connection reset by peer
- azure - 尝试在运行时更改策略:IDX10501:签名验证失败。无法匹配键:孩子
- angular7 - 我们可以使用类似于“agLargeTextCellEditor”的自定义单元格编辑器吗?
- python - Python:如何在字典中移动索引
- python - 如何为人脸识别python创建未知人脸数据集
- anaconda - 创建 Anaconda 虚拟环境报错
- windows - 无法在 ffmpeg 中列出捕获卡的选项:“无法 BindToObject”
- r - R:通过基于一个因素组合列来延长轴心