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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无法实例化抽象类Illuminate Database Eloquent Model - 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集合?

答案

Eloquent(这是IlluminateDatabaseEloquentModel的别名)是一个抽象类。你无法实例化它。相反,你必须这样做:

$inputs = Input::all();
$user =  new User;
$result = Helpers::buildQuery($user, $inputs);

类型限制buildQuery(Eloquent $model, $inputs)仍然可以正常工作,因为User扩展Eloquent,因此被该方法接受。


一个小小的注释,您可能还想考虑创建一个基础模型来扩展Eloquent并在所有模型之间共享功能。

另一答案

你只需要传递你的模型类,例如扩展eloquent的User模型:

$inputs = Input::all();
$user =  new User;
$result = Helpers::buildQuery($user, $inputs);
另一答案

只需在ungaurd()regaud()方法中播种器类之前和之后添加run()DatabaseSeeder.php

 IlluminateDatabaseEloquentModel::unguard();

 //$this->call(UsersTableSeeder::class);

 IlluminateDatabaseEloquentModel::reguard();

这解决了我的问题。

以上是关于无法实例化抽象类Illuminate Database Eloquent Model - Laravel 4的主要内容,如果未能解决你的问题,请参考以下文章

C ++无法实例化抽象类子

抽象类不能实例化对象

错误 C2259:“类”:无法实例化抽象类

mypy 错误:向抽象方法添加类型时无法使用抽象属性实例化抽象类

抽象类

Visual Studio 2015“无法实例化抽象类”编译失败构建 openFrameworks 0.9.0