我正在尝试提取Eloquent查询的构建,因为我想在许多不同的模型中重用此代码。在控制器中,我有:
$inputs = Input::all();
$user = new Eloquent;
$result = Helpers::buildQuery($user, $inputs);
助手班:
<?php namespace ArgumentClub;
class Helpers {
public static function buildQuery(Eloquent $model, $inputs)
{
$limit = isset($inputs['limit']) ? $inputs['limit'] : 10;
$offset = isset($inputs['offset']) ? $inputs['offset'] : 0;
list($orderCol, $orderBy) = isset($inputs['order']) ? explode(",", $inputs['order']) : explode(",", 'created_at,DESC');
$result = $model
->orderBy($orderCol, $orderBy)
->skip($offset)
->take($limit)
->get();
return $result;
}
}
那么,我如何传递模型并让它查询该模型,返回Eloquent集合?
答案 0 :(得分:1)
Eloquent
(这是Illuminate\Database\Eloquent\Model
的别名)是一个抽象类。你无法实例化它。相反,你必须这样做:
$inputs = Input::all();
$user = new User;
$result = Helpers::buildQuery($user, $inputs);
类型限制buildQuery(Eloquent $model, $inputs)
仍然可以正常运行,因为User
扩展了Eloquent
,因此被方法接受。
稍微注意一点,您可能还想考虑创建一个基础模型来扩展Eloquent
并在所有模型之间共享功能。
答案 1 :(得分:0)
你只需要传递你的模型类,例如一个扩展雄辩的User
模型:
$inputs = Input::all();
$user = new User;
$result = Helpers::buildQuery($user, $inputs);
答案 2 :(得分:0)
只需在[{1}}
的ungaurd()
方法中,在播种机课程之前和之后添加regaud()
和run()
DatabaseSeeder.php
这解决了我的问题。