如何在laravel控制器中引用模型?

时间:2016-07-28 10:08:28

标签: laravel-5.2

我发现laravel 5.2中“控制器”和“模型”之间的区别非常模糊。

我使用artisan创建一个RESTful控制器,在store方法中,我尝试创建一个新对象。

// store in the database
$car = new App\Models\CarModel;

然后我得到如下错误:

Class 'carfreak\Http\Controllers\App\Models\CarModel' not found

所以这一切似乎都归结为控制器的命名空间,但我不明白。

名称空间描述了控制器,对吗? 那么为什么我参考模型,建立在控制器路径上?它不应该与它有任何关系......对吗?

编辑:在尝试了各种建议之后,我得出结论有三件事要看:

  1. 每个类都有一个名称空间集,正确描述了该类所在的文件夹
  2. 在控制器中,使用“使用app \ models \ CarModel”
  3. 语句
  4. 参考控制器中的模型。
  5. 每个似乎都是正确的,但我仍然得到它无法找到模型的错误

5 个答案:

答案 0 :(得分:1)

这是php中的命名空间问题。

你就这样使用。

$car = new \App\Models\CarModel;

use App\Models\CarModel;
....    
class {
    $car = new CarModel;
}

答案 1 :(得分:1)

首先检查模型文件中的名称空间,在模型文件中定义名称空间

namespace App\Http\Models;

然后使用

use App\Http\Models\CarModel;

答案 2 :(得分:0)

您需要在班级的顶部添加use语句。

尝试:

use carfreak\Models\CarModel;

class ...

这假设您的模型位于carfreak\Models命名空间中,位于Models / App文件夹中的carfreak文件夹中,否则您只需要use carfreak\CarModel;

答案 3 :(得分:0)

我相信您刚刚运行artisan命令来创建模型,而您没有将CarModel文件移动到Models文件夹。 (如果我错了,请纠正我)

所以在你的控制器中在类声明之前添加这个:

use carfreak\CarModel;

然后,您可以在控制器的任何位置访问模型,如下所示:

$car = new CarModel;

答案 4 :(得分:0)

嗯,这是。我通过问自己这个问题解决了这个问题:如果我在命名空间,参考和组织我的模型时遇到了很多麻烦,那么也许我可以让工匠为我做这件事。

让我思考不同的帖子是Mansoor Akhtar的建议:How do I instruct artisan to save model to specific directory?

  1. 让工匠第一次在正确的位置制作模型。 php artisan make:model Models/CarModel

  2. 在Controller中,正确引用模型 use name-of-app\Models\CarModel;

  3. 我的问题可能有也可能没有缓存刷新问题。每次更改后我都会重新启动我的XAMPP,以确保不涉及缓存。我也试过了 php artisan cache:clear