通过自定义类访问模型

时间:2017-12-05 06:21:05

标签: php laravel oop laravel-5 laravel-5.5

我正在尝试通过课程访问模型。 我试图在Laravel 5.5安装上完成这项工作。 文件夹结构是默认的,除了我在App / Libraries中有一个文件夹来保存我的自定义类。

我的问题是,当我尝试通过我的班级访问模型时,我收到以下错误。可能是命名空间问题,但我似乎无法找到它。它正在寻找错误的地方。

错误是

  

未找到类'App \ Libraries \ App \ AccountsModel

以下是我的代码。

应用程序/库/ Account.php

<?php
namespace App\Libraries;
use App\AccountsModel;
class Account {



public $accountNum;
    public $accountDescription;
    public $isMainAccount;
    public $parentAccount;
    public $createTime;
    public $updatedTime;

    public function getInfo($accountNum)
    {
        $account = App\AccountsModel::where('accountNumber', $accountNum)->take(1)->get(); //Error coming up due to this line
        //return $account;
        //return $this;
    }
}
?>

应用\ AccountsModel.php

<?php
namespace App\AccountsModel; 
use Illuminate\Database\Eloquent\Model;

class AccountsModel extends Model
{
    protected $table = 'accounts';

}

应用程序/ HTTP /控制器/ AccountsController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Libraries\Account;

class AccountsController extends Controller
{
    public function create()
    {
        $account = new Account;
        var_dump($account->getInfo("1-1000"));
    }
}

我在composer.json上自动加载模型,如下所示。 以下任何输入也表示赞赏。 我尝试在模型中的构造上回显类名,没有回声,所以我猜我也是错误地自动加载。

"autoload": {
        "classmap": [
            "database/seeds",
            "database/factories"
        ],
        "psr-4": {
            "App\\": "app/",
            "AccountsModel\\" : "app/AccountsModel.php"
        }
    },

最终,当我收到错误时,我正试图通过我的自定义Account类访问模型。 非常感谢任何帮助。

2 个答案:

答案 0 :(得分:5)

班级AccountsModel已包含在use部分中。因此,您可以使用AccountsModel代替App\AccountsModel。请参阅下面的更新代码

<?php
namespace App\Libraries;
use App\AccountsModel;
class Account {



public $accountNum;
    public $accountDescription;
    public $isMainAccount;
    public $parentAccount;
    public $createTime;
    public $updatedTime;

    public function getInfo($accountNum)
    {
        $account = AccountsModel::where('accountNumber', $accountNum)->take(1)->get(); // this line updated
    }
}
?>

将您的模型更新为此。只需namespace App;

<?php
namespace App; 
use Illuminate\Database\Eloquent\Model;

class AccountsModel extends Model
{
    protected $table = 'accounts';

}

此外,composer.json中不需要这样做,因为AccountModelApp的一部分。

"AccountsModel\\" : "app/AccountsModel.php"

答案 1 :(得分:2)

app/AccountsModel.php文件中,名称空间应为App

namespace App;

并且composer.json文件

中不需要以下条目
"AccountsModel\\" : "app/AccountsModel.php"