通过自定义访问模型 Class

Accessing Model Through Custom Class

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

我的问题是当我尝试通过 class 访问模型时出现以下错误。可能是命名空间问题,但我似乎找不到它。它看错地方了。

错误是

Class 'App\Libraries\App\AccountsModel' not found

下面是我的代码。

app/Libraries/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;
    }
}
?>

app\AccountsModel.php

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

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

}

app/Http/Controllers/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 上自动加载模型,如下所示。 对以下任何输入也表示赞赏。 我尝试在模型中的构造上回显 class 名称,但没有回显,所以我猜我也错误地自动加载了它。

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

最终,当我收到错误消息时,我试图通过我的自定义帐户 class 访问该模型。 非常感谢任何帮助。

在您的 app/AccountsModel.php 文件中,命名空间应该是 App

namespace App;

composer.json 文件中不需要以下条目

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

class 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"