首页 > 解决方案 > 如何从模型调用结果数据库查询到 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 控制器中调用它。

我应该怎么做?

标签: phpsqllaravel

解决方案


正确的方法是将您的业务逻辑和其他功能像您所做的那样放在您的控制器中。为什么需要将 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


推荐阅读