【问题标题】:Laravel Administrator: exception 'BadMethodCallException' with message 'Call to undefined method Illuminate\Database\Query\Builder::Laravel 管理员:异常 'BadMethodCallException' 带有消息'调用未定义的方法 Illuminate\Database\Query\Builder::
【发布时间】:2014-09-11 20:42:35
【问题描述】:

我正在尝试在我的一张表的配置中使用 Laravel 4 管理员的全局操作('global_actions' 数组),无论我调用什么方法,我都会感到害怕:

local.ERROR: exception 'BadMethodCallException' with message 'Call to undefined method Illuminate\Database\Query\Builder::doNothing()' in C:\xampp\htdocs\tikitour\vendor\laravel\framework\src\Illuminate\Database\Query\Builder.php:2117
Stack trace:
#0 [internal function]: Illuminate\Database\Query\Builder->__call('doNothing', Array)
#1 [internal function]: Illuminate\Database\Query\Builder->doNothing()
#2 C:\xampp\htdocs\tikitour\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Builder.php(913): call_user_func_array(Array, Array)
#3 C:\xampp\htdocs\tikitour\app\config\administrator\countries.php(81): Illuminate\Database\Eloquent\Builder->__call('doNothing', Array)
#4 C:\xampp\htdocs\tikitour\app\config\administrator\countries.php(81): Illuminate\Database\Eloquent\Builder->doNothing()
#5 C:\xampp\htdocs\tikitour\vendor\frozennode\administrator\src\Frozennode\Administrator\Actions\Action.php(159): Frozennode\Administrator\Config\Factory->{closure}(Object(Illuminate\Database\Eloquent\Builder))
#6 C:\xampp\htdocs\tikitour\vendor\frozennode\administrator\src\controllers\AdminController.php(205): Frozennode\Administrator\Actions\Action->perform(Object(Illuminate\Database\Eloquent\Builder))
#7 [internal function]: Frozennode\Administrator\AdminController->customModelAction('Countries')
#8 C:\xampp\htdocs\tikitour\vendor\laravel\framework\src\Illuminate\Routing\Controller.php(231): call_user_func_array(Array, Array)
#9 C:\xampp\htdocs\tikitour\vendor\laravel\framework\src\Illuminate\Routing\ControllerDispatcher.php(93): Illuminate\Routing\Controller->callAction('customModelActi...', Array)
#10 C:\xampp\htdocs\tikitour\vendor\laravel\framework\src\Illuminate\Routing\ControllerDispatcher.php(62): Illuminate\Routing\ControllerDispatcher->call(Object(Frozennode\Administrator\AdminController), Object(Illuminate\Routing\Route), 'customModelActi...')
#11 C:\xampp\htdocs\tikitour\vendor\laravel\framework\src\Illuminate\Routing\Router.php(962): Illuminate\Routing\ControllerDispatcher->dispatch(Object(Illuminate\Routing\Route), Object(Illuminate\Http\Request), 'Frozennode\Admi...', 'customModelActi...')
#12 [internal function]: Illuminate\Routing\Router->Illuminate\Routing\{closure}('Countries')
#13 C:\xampp\htdocs\tikitour\vendor\laravel\framework\src\Illuminate\Routing\Route.php(109): call_user_func_array(Object(Closure), Array)
#14 C:\xampp\htdocs\tikitour\vendor\laravel\framework\src\Illuminate\Routing\Router.php(1028): Illuminate\Routing\Route->run(Object(Illuminate\Http\Request))
#15 C:\xampp\htdocs\tikitour\vendor\laravel\framework\src\Illuminate\Routing\Router.php(996): Illuminate\Routing\Router->dispatchToRoute(Object(Illuminate\Http\Request))
#16 C:\xampp\htdocs\tikitour\vendor\laravel\framework\src\Illuminate\Foundation\Application.php(776): Illuminate\Routing\Router->dispatch(Object(Illuminate\Http\Request))
#17 C:\xampp\htdocs\tikitour\vendor\laravel\framework\src\Illuminate\Foundation\Application.php(746): Illuminate\Foundation\Application->dispatch(Object(Illuminate\Http\Request))
#18 C:\xampp\htdocs\tikitour\vendor\barryvdh\laravel-debugbar\src\Middleware.php(34): Illuminate\Foundation\Application->handle(Object(Illuminate\Http\Request), 1, true)
#19 C:\xampp\htdocs\tikitour\vendor\laravel\framework\src\Illuminate\Session\Middleware.php(72): Barryvdh\Debugbar\Middleware->handle(Object(Illuminate\Http\Request), 1, true)
#20 C:\xampp\htdocs\tikitour\vendor\laravel\framework\src\Illuminate\Cookie\Queue.php(47): Illuminate\Session\Middleware->handle(Object(Illuminate\Http\Request), 1, true)
#21 C:\xampp\htdocs\tikitour\vendor\laravel\framework\src\Illuminate\Cookie\Guard.php(51): Illuminate\Cookie\Queue->handle(Object(Illuminate\Http\Request), 1, true)
#22 C:\xampp\htdocs\tikitour\vendor\stack\builder\src\Stack\StackedHttpKernel.php(23): Illuminate\Cookie\Guard->handle(Object(Illuminate\Http\Request), 1, true)
#23 C:\xampp\htdocs\tikitour\vendor\laravel\framework\src\Illuminate\Foundation\Application.php(642): Stack\StackedHttpKernel->handle(Object(Illuminate\Http\Request))
#24 C:\xampp\htdocs\tikitour\public\index.php(49): Illuminate\Foundation\Application->run()
#25 {main} [] []

config 数组在下面,'permission' 属性工作得很好,我现在有了它,所以 doNothing() 方法只返回 true:

'global_actions' => array(
        //Importing data via xls upload 
        'use_upload' => array(
            'title' => 'Use Upload',
            'messages' => array(
                'active' => 'Uploading...',
                'success' => 'Uploaded',
                'error' => 'There was an error while Uploading',
            ),
            'permission' => function($model)
            {                           
                return $model->hasUpload();             
            },
            //the model is passed to the closure
            'action' => function($model)
            {   

                $model->doNothing();                               
            }
        ),

    ),      

最重要的是,这在管理员之外可以完美运行。看起来模型的方法必须以某种方式向 Illuminate 注册,但我认为情况并非如此,因为 ->hasUpload() 已被识别并且工作正常。

【问题讨论】:

    标签: php laravel laravel-4 eloquent


    【解决方案1】:

    问题已解决:我混合了 global_action 和 custom_action,这个配置选项传递了一个查询构建器的实例,而不是被表示的模型。我在函数中实例化了我需要的模型:

    //the Eloquent query builder is passed to the closure
    'action' => function($query)
    {                   
        $country = new Countries();
        return $country->processUpload();
    }
    

    【讨论】:

      猜你喜欢
      • 2016-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-12
      • 2017-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多