如何从模型向API控制器Laravel调用结果数据库查询

时间:2018-12-17 07:24:20

标签: php sql laravel

我在API控制器(FormController.php)中有此查询,该查询调用2个与它们一对多相关的模型。

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 Controller移到Model并使用DB :: Raw SQL,然后在此API Controller中调用它。

我应该怎么办?

1 个答案:

答案 0 :(得分:0)

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