无法实例化抽象类Illuminate \ Database \ Eloquent \ Model - Laravel 4

时间:2015-02-11 12:03:48

标签: laravel laravel-4

我正在尝试提取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集合?

3 个答案:

答案 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

这解决了我的问题。