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

问题描述 投票:2回答:3

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

laravel laravel-4
3个回答
1
投票

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

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

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


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


0
投票

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

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

0
投票

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

 \Illuminate\Database\Eloquent\Model::unguard();

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

 \Illuminate\Database\Eloquent\Model::reguard();

这解决了我的问题。

© www.soinside.com 2019 - 2024. All rights reserved.