Laravel 5 模型文件夹

33

我有一个名为models的目录,位于app/内,我放置了所有的模型类。现在我想要更改目录,让以下命令输出生成的类:

php artisan make:model SomeModel
6个回答

59
不能这样做,如果你遵循Laravel的宇宙版本,你就不应该这么做。 Laravel 5为其所有类文件提供并假定了PSR-4命名约定。这意味着模型(以及所有类)应该根据其完整的类名进行放置。 当你说

php artisan make:model SomeModel

实际上,您正在创建一个名为App\SomeModel的模型,因此artisan将创建以下文件。

app/SomeModel.php

如果你说过

php artisan make:model 'Test\SomeModel'

您将创建一个名为App\Test\SomeModel的模型,Laravel将创建以下文件

app/Test/SomeModel.php

因此,是您的模型的完整类名(包括命名空间)决定类定义文件的位置。


1
我在Laravel 5中尝试了这个,当给定模型文件的路径时,我必须像你提到的那样不使用单引号来指定路径。这对我起作用:php artisan make:model Test\SomeModel - Neel
1
@Alan:Laravel 5中删除models目录是否有特定原因? - Ashish
1
@Ashish 遵循 PHP 命名空间标准,并确保所有应用程序类以相同的方式自动加载。 - Alana Storm

14

我认为它应该是这样:

php artisan make:model ModelFolder\\SomeModel

6
实际上它应该有一个反斜杠。 - Ali Sherafat
这很可能取决于你的终端...? - Mike Rockétt
3
查看 Laravel 源代码,如果你将路径指定为 app/myspace/etc,Laravel 会在内部使用 str_replace() 将所有 / 替换为 \\,因此你可以使用单斜杠或双反斜杠(即转义)中的任一种来工作,取决于你的选择! - ChrisH
我尝试使用一个斜杠,但它创建了带有文件夹名称的文件。在laravel 6中使用双斜杠可以正常工作。 - user10678889

1
如果您想在特定文件夹中手动创建模型。例如,如果您想要在文件夹Models中创建模型info。请在先前创建的文件夹Models中创建名为info.php的文件。在info.php中编写以下代码。
<?php namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Info extends Model
{
    // your code
    protected $table = 'tb_users';
}

当然,您也可以使用Artisan命令php artisan make:model "Models\Info"
如果您想将该模型称为Info,则需要创建一个视图。
<?php
$users = App\Models\Info::all();

foreach ($users as $user) {
    echo $user->name;
}

它将显示所有用户的名称。

0

0

可以参考这篇中文教程https://medium.com/@codingcave/organizing-your-laravel-models-6b327db182f9,来解决这个问题。 更好的解决方案是扩展ModelMakeCommand,这样你就不需要运行php artisan make:model 'Test\SomeModel',而是运行php artisan make:model SomeModel,你仍然会得到'Test\SomeModel'命名空间,SomeModel.php文件在'Test'文件夹中。


0
你还可以查看当模型创建时生成的www/yourfolder/database/php文件。

3
欢迎来到Stack Overflow!这似乎更像是一条评论。请不要将评论写成答案。 - coderpc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接