以下のコードで、私が欲しかったのは、作成したクエリをページ分割することでした。しかし、getの後にpaginateを追加しようとすると、エラーがスローされます。 $ fieldsに設定された列に制限したいので、getのままにしておきたいと思いました。このことをページ付けするためのより良いアイデアは何でしょうか?または、列を取得して制限するための適切な代替手段は何ですか?
私が試したこと:
->get($this->fields)->paginate($this->limit)
私のコントローラーの一部:
class PhonesController extends BaseController {
protected $limit = 5;
protected $fields = array('Phones.*','manufacturers.name as manufacturer');
/**
* Display a listing of the resource.
*
* @return Response
*/
public function index()
{
if (Request::query("str")) {
$phones = Phone::where("model", 'LIKE', '%'. Request::query('str') . '%')
->join('manufacturers', 'manufacturers_id', '=', 'manufacturers.id')
->get($this->fields);
} else {
$phones = Phone::join('manufacturers', 'manufacturers_id', '=', 'manufacturers.id')
->get($this->fields);
}
return View::make('phones.index')->with('phones', $phones);
}
}
メソッドシグネチャ を見ると、paginateが2番目の引数$ columnsを受け取っていることがわかります。だからあなたの解決策は使用することです
->paginate($this->limit, $this->fields);
さらに、少し変更することでコントローラーをクリーンアップできます。
public function index()
{
$query = Phones::join('manufacturers', 'manufacturers_id', '=', 'manufacturers.id');
if ( Request::query('str') ) {
$query->where('model', 'LIKE', '%'. Request::query('str') . '%')
}
$phones = $query->paginate($this->limit, $this->fields);
return view('phones.index')->with('phones', $phones);
}
class Servicios extends CI_Controller
{
public function __construct()
{
parent::__construct();
header('Content-Type: application/json');
if (!$this->lib_validaciones->validarSesion(FALSE))
{
exit(json_encode(array("satisfactorio" => FALSE, "mensaje" => "NO TIENE SESSION ACTIVA")));
}
$this->usuarioId = $this->session->userdata("usuarioId");
}
public function index()
{
exit();
}
public function getPremios()
{
$currentPage = $this->input->get("pag");
\Illuminate\Pagination\Paginator::currentPageResolver(function () use ($currentPage)
{
return $currentPage;
});
$this->load->model('Premio');
$premios = Premio::where('activo', "TRUE")
->with(['Categoria' => function($q)
{
$q->select('id', 'nombre');
}])
->with(['Imagenes' => function ($query)
{
$query->where("activo", "TRUE");
$query->select(["imagenes.id", "imagenes.descripcion",
new Illuminate\Database\Query\Expression(
"CONCAT('" . site_url(PATH_IMAGENES_UPLOAD) . "',imagenes.id,'.',imagenes.extension) as path")
]);
}])
->with(['inventario'])
->withCount(['Favoritos', 'Favoritos AS favorito_usuario' => function ($query)
{
$query->where("usuario_id", $this->usuarioId);
}])
->orderBy("nombre")
->paginate(3);
$premios->setPath(site_url(uri_string()));
$premios->setPageName("pag");
exit(json_encode(array("satisfactorio" => TRUE, "premios" => $premios->toArray())));
}
}