无法实例化抽象类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的主要内容,如果未能解决你的问题,请参考以下文章