【问题标题】:Using Model in custom Laravel Artisan在自定义 Laravel Artisan 中使用模型
【发布时间】:2014-01-23 13:52:32
【问题描述】:

编辑:添加了我的模型的命名空间部分。

我有一个有效的自定义 Artisan 命令,但是一旦我开始插入我创建的模型,我就会立即收到错误消息。

<?php namespace App\Command;

use App\Models\Samplemodel;

public function fire()
{
    $name = $this->argument('name');
    // This next line won't work
    $age = Samplemodel::get_age($this->option('bday')); // Line 42

    $this->line("My name is {$name} and my age is {$age}.");
}

我总是遇到错误:

{"error":{"type":"Symfony\\Component\\Debug\\Exception\\FatalErrorException","message":"Class 'App\\Models\\Samplemodel' not found","fi
le":"X:\\xampp\\htdocs\\laralabs\\laralabs.app\\app\\commands\\SampleCommand.php","line":42}}{"error":{"type":"Symfony\\Component\\De
bug\\Exception\\FatalErrorException","message":"Class 'App\\Models\\Samplemodel' not found","file":"X:\\xampp\\htdocs\\laralabs\\larala
bs.app\\app\\commands\\SampleCommand.php","line":42}}

我从这个示例代码中删除了其他方法以保持干净。基本上就是这样,是不是意味着我在创建自定义 Artisan 命令时不能使用模型?

根据要求,我的模型的前几行:

<?php namespace App\Models;

use DB;
use Config;
use Eloquent;
use DateTime;

class Helper extends Eloquent { ... }

我的模型的实际名称是Helper。这个类没有任何属性只有方法。

【问题讨论】:

  • 您是否将命令添加到 composer 自动加载器?还是手动创建?
  • 我在文档中使用了php artisan command:make SampleCommand。只有当我插入Samplemodel 的使用时才会出现错误。如果没有模型,它可以正常工作。
  • 你的模型命名空间是App\Models吗?不写use 行怎么样,有帮助吗?请显示您的模型文件内容。
  • 请向我们展示您的 Samplemodel 代码。
  • @Vlakarados,是的,我的模型命名为App\Models。 @Antonio,实际模型很长(并且正在使用,所以它工作得很好)这就是为什么我制作了一个你现在看到的样本。让我进行更多测试...

标签: php laravel laravel-4


【解决方案1】:

只要你正确命名你的东西,它就可以工作。我刚刚在这里测试过:

创建命令:

artisan command:make UseModel

将源代码修改为:

<?php

use Illuminate\Console\Command;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Input\InputArgument;

class UseModel extends Command {

    protected $name = 'model';

    protected $description = 'Command description.';

    public function __construct()
    {
        parent::__construct();
    }

    public function fire()
    {
        var_dump(ACR\Models\Article::all());
    }

    protected function getArguments()
    {
        return array(
        );
    }

    protected function getOptions()
    {
        return array(
        );
    }

}

将其添加到 artisan.php:

Artisan::add(new UseModel);

并运行它进行测试:

artisan model

而且它破坏了模型

这是模型:

<?php namespace ACR\Models;

class Article extends Eloquent {

    protected $table = 'articles';

}

也可以使用

use ACR\Models\Article;

var_dump(Article::all());

【讨论】:

  • 这帮助我找到了答案。只需按照您的示例删除namespace,我的代码就可以工作了。我不确定这是否是您的意图,但在注意到差异后,我只是试了一下。
  • @enchance - 你的评论也帮助了我。 :)
  • 我遇到了类似的问题,但您的解决方案对我不起作用。 All() 方法工作正常,但是当我尝试使用 where() 时,它什么也不返回。我 100% 确定我正在查询正确的数据。如果我删除命名空间,当我从命令行运行时,我会得到一个找不到类。
猜你喜欢
  • 2018-07-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-11
  • 2017-10-25
  • 1970-01-01
  • 2021-01-12
  • 1970-01-01
  • 2016-04-23
相关资源
最近更新 更多