如何在Laravel 5中调用控制器内的模型函数

时间:2015-09-27 09:08:12

标签: php laravel-5

我一直面临着在新的laravel框架版本5中无法在控制器内部使用模型的问题。我使用artisan命令创建了模型 “php artisan make:model Authentication”,它在app文件夹中成功创建了模型,之后我在其中创建了一个小函数测试,我的模型代码如下所示。

 <?php namespace App;

 use Illuminate\Database\Eloquent\Model;

 class Authentication extends Model {

   protected $table="canteens";

   public function test(){
    echo "This is a test function";
   }

}

现在我不知道,如何将模型的函数test()调用到我的控制器,任何帮助都将不胜感激,提前致谢。

7 个答案:

答案 0 :(得分:11)

运行该功能并查看输出的快速而肮脏的方法是编辑app\Http\routes.php并添加:

use App\Authentication;

Route::get('authentication/test', function(){
    $auth = new Authentication();
    return $auth->test();
});

然后访问您的网站并转到此路径:/authentication/test

Route :: get()的第一个参数设置路径,第二个参数说明调用该路径时该怎么做。

如果你想进一步,我建议创建一个控制器并用控制器上的方法替换该匿名函数。在这种情况下,您可以通过添加以下内容来更改app\Http\Routes.php

Route::get('authentication/test', 'AuthenticationController@test');

然后使用artisan创建一个名为AuthenticationController的控制器或创建app\Http\Controllers\AuthenticationController.php并对其进行编辑:

<?php namespace App\Http\Controllers;

use App\Authentication;

class AuthenticationController extends Controller {
    public function test()
    {
        $auth = new Authentication();
        return $auth->test();
    }
}

同样,您可以转到Laravel网站上的/authentication/test来查看结果。

答案 1 :(得分:4)

<?php namespace App;

 use Illuminate\Database\Eloquent\Model;

 class Authentication extends Model {

   protected $table="canteens";

   public function scopeTest(){
    echo "This is a test function";
   }

}

只需在test()前加上scope。这将成为scopeTest()

现在您可以从Authentication::Test()

等任何地方拨打电话

答案 2 :(得分:3)

在方法名称之前使用范围

<?php

namespace App\Models;
use Illuminate\Support\Facades\DB;

use Illuminate\Database\Eloquent\Model;

class Mainmenu extends Model
{

  public function scopeLeftmenu() {

    return DB::table('mainmenus')->where(['menu_type'=>'leftmenu', menu_publish'=>1])->orderBy('menu_sort', 'ASC')->get();
  }
}

上面的代码我试图访问某些目的来调用左侧菜单的数据库

比我们可以在Controller中轻松调用它

<?php 

 Mainmenu::Leftmenu();

答案 3 :(得分:2)

您可以在控制器中调用模型功能,如

$value = Authentication::test();
var_dump($value);

答案 4 :(得分:1)

只需将其设置为静态 公共静态函数test(){ .... } 那么你可以这样称呼它 身份验证:: test();

答案 5 :(得分:0)

1)首先,确保您的模型位于模型文件夹

2)然后假设您有一个名为Property的模型,其中有一个名为returnCountries的方法。

public function returnCountries(){
$countries = Property::returnCountries(); 
}

当然,在你的情况下,用你的Model的名称替换Property,如果你的函数是test,则用名称返回returnCountries,这是Test

并在模型中编写请求国家/地区的函数

所以在你的模型中,放置一个:

 <?php namespace App;

 use Illuminate\Database\Eloquent\Model;

 class Authentication extends Model {

   protected $table="canteens";

   public function test(){
    return $test = "This is a test function";
   }

}

这就是你的控制器将要获得的

答案 6 :(得分:0)

对我来说,修复是将函数设置为静态:

public static function test() {..}

然后直接在控制器中调用它:

Authentication::test()