2017-12-05 11 views
1

クラスを介してモデルにアクセスしようとしています。 私はこれをLaravel 5.5インストールで実行しようとしています。 私のカスタムクラスを保持するアプリケーション/ライブラリのフォルダがある以外は、フォルダ構造がデフォルトです。カスタムクラスを使用したモデルへのアクセス

私のクラスでモデルにアクセスしようとすると、私の下のエラーが表示されます。おそらくネームスペースの問題ですが、私はそれを見つけることができません。それは間違った場所を見ている。

エラーが

クラス 'の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" 
     } 
    }, 

最終的に、エラーが発生したときに私のカスタムアカウントクラスを介してモデルにアクセスしようとしています。 何か助けていただければ幸いです。あなたのapp/AccountsModel.phpファイルで

+0

「名前空間App \ Libraries;」を「名前空間App」に変更してみてください。 ' –

+0

それを行いました。今すぐ "クラス 'App \ Libraries \ Account'が見つかりません。しかし、クラス名Account.phpは、上記のディレクトリにあります。何か案が? –

+0

名前空間App \ AccountsModelを削除します。名前空間Appを使用します。 –

答えて

5

AccountsModelが既にuseセクションに含めるクラスに次のエントリの必要はありません。したがって、App\AccountsModelの代わりに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 
    } 
} 
?> 

モデルをこれにアップデートしてください。 AccountModelAppの一部ですので、ジャストnamespace App;

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

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

} 

また、これはcomposer.jsonでは必要ありません。

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

名前空間はApp

namespace App; 

でなければならないとcomposer.jsonファイル

"AccountsModel\\" : "app/AccountsModel.php" 
関連する問題