如何从laravel 5中获得模型的结果

时间:2017-05-24 07:19:04

标签: laravel laravel-5

美好的一天,我试图通过我的控制器通过B调用我的模型获得结果,我的控制器是Mainmodel

这是我的控制器

MainController

这是我的模特

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use app\Mainmodel;

class MainController extends Controller
{


    function index(){
        echo "Kok, direct akses sih?";
    }

    function get_menu(){
         $menu = app\Mainmodel::request_menu();
         dd($menu);
    }

}

我的路线

   <?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Mainmodel extends Model
{
    function request_menu(){
        $menu = DB::table('menu')
                ->orderBy('[order]', 'desc')
                ->get();
         return $menu;
    }
}

我上面的脚本我得到了这个

  

MainController.php第17行中的FatalErrorException:Class   &#39;应用软件\ HTTP \控制器\应用\ Mainmodel&#39;找不到

我该如何解决这个问题?提前谢谢。

注意:我对laravel有点困惑。我之前使用过codeigniter。我有一个简单的问题。在laravel请求数据库应该使用模型?或者我可以使用我的控制器来处理我对数据库的请求。

抱歉我的英语不好。

2 个答案:

答案 0 :(得分:2)

我想是因为您使用app而不是App作为命名空间。

尝试更改:

app\Mainmodel

致:

App\Mainmodel

或者,您可以在类的顶部添加use语句,然后只引用该类,即:。

use App\Mainmodel;

然后你可以做类似的事情:

Mainmodel::request_menu();

您当前使用模型的方式不是Eloquent应该使用的方式。正如我在评论中提到的,您应该为数据库中的每个表创建一个模型(或者至少在大多数用例中)。

要执行此操作:

php artisan make:model Menu

然后在新创建的Menu模型中添加:

protected $table = 'menu';

这是因为Laravel的默认命名约定对于类名是单数,对于表名是复数。由于您的表名是菜单而不是菜单,您只需要告诉Laravel使用不同的表名。

然后你的控制器看起来像:

<?php

namespace App\Http\Controllers;

use App\Menu;

class MainController extends Controller
{
    public function index()
    {
        echo "Kok, direct akses sih?";
    }

    public function get_menu()
    {
        $menu = Menu::orderBy('order', 'desc')->get();
        dd($menu);
    }

}

希望这有帮助!

答案 1 :(得分:0)

您可以通过不同的解决方案解决它。解决方案是您无需致电request_menu();,您可以在控制器中获取它。

<强> MainController

use use Illuminate\Support\Facades\DB;

public function get_menu(){
             $menu =  DB::table('menu')
            ->orderBy('Your_Field_Name', 'DESC')
            ->get();

             dd($menu);
}