简体   繁体   English

Laravel 5.2调用未定义的方法Illuminate \\ Database \\ Query \\ Builder :: activateTask()

[英]Laravel 5.2 Call to undefined method Illuminate\Database\Query\Builder::activateTask()

I am a newbie using laravel and got into a problem after I changed my code from routes to controller. 我是使用laravel的新手,将代码从路由更改为控制器后遇到了问题。

All the code was working perfect while I had them placed in routes.php, but when I made this code into a function in controller Task.php and added the function function to routes.php I got the following error -> 当我将它们放置在routes.php中时,所有代码都运行良好,但是当我将此代码放入控制器Task.php中的函数并将该函数添加到routes.php中时,出现以下错误->

BadMethodCallException in Builder.php line 2161: Call to undefined method Illuminate\Database\Query\Builder::activateTask()



in Builder.php line 2161
at Builder->__call('activateTask', array(object(Task)))
at call_user_func_array(array(object(Builder), 'activateTask'), array(object(Task))) in Builder.php line 1313
at Builder->__call('activateTask', array(object(Task)))
at call_user_func_array(array(object(Builder), 'activateTask'), array(object(Task))) in Model.php line 3490
at Model->__call('activateTask', array(object(Task)))
at call_user_func_array(array(object(Task), 'activateTask'), array(object(Task))) in Model.php line 3504
at Model::__callStatic('activateTask', array(object(Task))) in routes.php line 45
at RouteServiceProvider->{closure}(object(Task))
at call_user_func_array(object(Closure), array('task' => object(Task))) in Route.php line 158
at Route->runCallable(object(Request)) in Route.php line 137
at Route->run(object(Request)) in Router.php line 724
at Router->Illuminate\Routing\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 52
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in VerifyCsrfToken.php line 64
at VerifyCsrfToken->handle(object(Request), object(Closure))
at call_user_func_array(array(object(VerifyCsrfToken), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in ShareErrorsFromSession.php line 49
at ShareErrorsFromSession->handle(object(Request), object(Closure))
at call_user_func_array(array(object(ShareErrorsFromSession), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in StartSession.php line 62
at StartSession->handle(object(Request), object(Closure))
at call_user_func_array(array(object(StartSession), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in AddQueuedCookiesToResponse.php line 37
at AddQueuedCookiesToResponse->handle(object(Request), object(Closure))
at call_user_func_array(array(object(AddQueuedCookiesToResponse), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in EncryptCookies.php line 59
at EncryptCookies->handle(object(Request), object(Closure))
at call_user_func_array(array(object(EncryptCookies), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32
at Pipeline->Illuminate\Routing\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 102
at Pipeline->then(object(Closure)) in Router.php line 726
at Router->runRouteWithinStack(object(Route), object(Request)) in Router.php line 699
at Router->dispatchToRoute(object(Request)) in Router.php line 675
at Router->dispatch(object(Request)) in Kernel.php line 246
at Kernel->Illuminate\Foundation\Http\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 52
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in CheckForMaintenanceMode.php line 44
at CheckForMaintenanceMode->handle(object(Request), object(Closure))
at call_user_func_array(array(object(CheckForMaintenanceMode), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32
at Pipeline->Illuminate\Routing\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 102
at Pipeline->then(object(Closure)) in Kernel.php line 132
at Kernel->sendRequestThroughRouter(object(Request)) in Kernel.php line 99
at Kernel->handle(object(Request)) in index.php line 53
at require_once('D:\wamp64\organizer\public\index.php') in server.php line 21

My task controller Task.php -> 我的任务控制器Task.php->

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Http\Requests;
use App\Http\Controllers\Controller;

class Task extends Controller
{
    //

    public function activateTask($task)
    {
        if($task->active == 1)
        {
            return redirect('/');
        }
        else
        {
            $task->active = 1;
            $task->save();
            if(Session('active') != null)
            {
                $oldtask = App\Session::find(Session('active'));
                $oldtask->Task->active = 0;
                $oldtask->Task->save();
                $oldtask->touch();
                $oldtask->save();
            }
            $session = new Session;
            $session->task()->associate($task);
            $session->save();
            Session(['active' => $session->id]);
            return redirect('/');
        }
    }

    public function saveTask($request) {

        $validator = Validator::make($request->all(), [
            'name' => 'required|max:255',
        ]);

        if($validator->fails()) {
            return redirect('/')->withInput()->withErrors($validator);
        }

        $task = new Task;
        $task->name = $request->name;
        $task->deadline = $request->deadline;
        $task->save();
    }

}

Tasks model Task.php -> 任务模型Task.php->

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Task extends Model
{
    //
    public function sessions()
    {
        return $this->hasMany('App\Session');
    }
}

Sessions model Session.php -> 会话模型Session.php->

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Session extends Model
{
    //

    public function task()
    {
        return $this->belongsTo('App\Task');
    }

}

routes.php -> routes.php->

<?php

use App\Task;
use App\Session;

use Illuminate\Http\Request;

Route::group(['middleware' => ['web']], function () {
    //

    Route::get('/', function() {
        $task = Task::orderBy('created_at', 'desc')->get();

        return view('layouts/tasks', [
            'tasks' => $task
        ]);

    });


    Route::post('/task', function (Request $request) {
        Task::saveTask($request);
    /*   
        $validator = Validator::make($request->all(), [
            'name' => 'required|max:255',
        ]);

        if($validator->fails()) {
            return redirect('/')->withInput()->withErrors($validator);
        }

        $task = new Task;
        $task->name = $request->name;
        $task->deadline = $request->deadline;
        $task->save();


    */
        return redirect('/');
    });



    Route::post('/task/{task}/activate', function (Task $task) {
        Task::activateTask($task);
    });



    Route::post('/task/{task}/deactivate', function (Task $task) {
        $task->active = 0;
        $task->save();
        $session = App\Session::find(Session('active'));
        $session->touch();

        $started = strtotime($session->created_at);
        $ended = strtotime($session->updated_at);
        $hours = abs(($ended - $started))/(60*60);
        $session->hours = $hours;

        $session->save();
        Session(['active' => null]);
        return redirect('/');

    });

    Route::delete('/task/{task}', function (Task $task){
        if($session = Session::find(Session('active')))
        {
            if($session->task->id == $task->id)
            {
                Session(['active', null]);
            }
        }

        $task->delete();
        return redirect('/');
    });

});

Problem happens when I press button to post to the routes. 当我按按钮发布到路线时,会发生问题。

Tried to google the problem and tried different approaches to fix this but no luck at all. 试图用谷歌搜索这个问题,并尝试了不同的方法来解决这个问题,但是根本没有运气。 I am pretty sure it is something really easy and dumb but cant figure it out. 我很确定这确实很简单而且很愚蠢,但无法弄清楚。

Your routes are not setup correctly. 您的路线设置不正确。 To use controllers, you pass a string as the second parameter in a controller@method format. 要使用控制器,请以controller@method格式传递字符串作为第二个参数。 So, your route should look like this: 因此,您的路线应如下所示:

Route::post('/task/{task}/activate', 'Task@activateTask');

Also, your controller method is expecting the value passed in to be the model, not an id, so you'll want to type hint your parameter to take advantage of implicit model binding: 另外,您的控制器方法期望传入的值是模型,而不是id,因此您需要键入hint来利用隐式模型绑定的参数:

public function activateTask(\App\Task $task) {
    //
}

You may want to take a look at the routing documentation for more information. 您可能需要查看路由文档以获取更多信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 laravel 5.2调用未定义的方法Illuminate \\ Database \\ Query \\ Builder :: associate() - laravel 5.2 Call to undefined method Illuminate\Database\Query\Builder::associate() Laravel 5.2单元测试错误:BadMethodCallException:调用未定义的方法Illuminate \\ Database \\ Query \\ Builder :: make() - Laravel 5.2 Unit Tests error: BadMethodCallException: Call to undefined method Illuminate\Database\Query\Builder::make() 调用未定义的方法Laravel 5中的Illuminate \\ Database \\ Query \\ Builder :: method()错误 - Call to undefined method Illuminate\Database\Query\Builder::method() error in laravel 5 Laravel 5调用未定义的方法Illuminate \ Database \ Query \ Builder :: method() - Laravel 5 Call to undefined method Illuminate\Database\Query\Builder::method() 调用未定义的方法Illuminate \\ Database \\ Query \\ Builder :: save()-Laravel 5 - Call to undefined method Illuminate\Database\Query\Builder::save()- Laravel 5 Laravel 5.4:调用未定义的方法Illuminate / Database / Query / Builder :: getRelated() - Laravel 5.4: Call to undefined method Illuminate/Database/Query/Builder::getRelated() Laravel 5错误调用未定义的方法Illuminate \\ Database \\ Query \\ Builder :: Test - Laravel 5 error Call to undefined method Illuminate\Database\Query\Builder::Test 调用未定义的方法Illuminate \\ Database \\ Query \\ Builder :: notify()Laravel 5.4 - Call to undefined method Illuminate\Database\Query\Builder::notify() Laravel 5.4 在laravel 5.4中调用未定义的方法Illuminate \\ Database \\ Query \\ Builder :: map() - Call to undefined method Illuminate\Database\Query\Builder::map() in laravel 5.4 Laravel Sync调用未定义的方法Illuminate \\ Database \\ Query \\ Builder - Laravel Sync Call to undefined method Illuminate\Database\Query\Builder
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM