我在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中调用它。
我应该怎么办?
答案 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