2017-12-05 1 views
1

Ich versuche, über eine Klasse auf ein Modell zuzugreifen. Ich versuche, dies auf einer Laravel 5.5-Installation zu erreichen. Die Ordnerstruktur ist der Standard, außer dass ich einen Ordner in App/Libraries habe, der meine benutzerdefinierten Klassen enthält.Zugreifen auf Modell über benutzerdefinierte Klasse

Mein Problem ist, dass ich den unten angegebenen Fehler erhalte, wenn ich versuche, über meine Klasse auf ein Modell zuzugreifen. Wahrscheinlich ein Namespace-Problem, aber ich kann es einfach nicht finden. Es sucht nach dem falschen Ort.

Der Fehler

Class 'App \ Bibliotheken \ App \ AccountsModel' ist nicht

gefunden

Unten ist mein Code.

app/Bibliotheken/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/Controller/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")); 
    } 
} 

Ich bin selbstladende das Modell auf composer.json wie unten. Jede Eingabe auf der Unterseite wird ebenfalls geschätzt. Ich habe versucht, den Klassennamen auf einem Konstrukt im Modell zu wiederholen, ohne Echo, also schätze ich, dass ich das auch falsch lade.

Letztendlich versuche ich auf das Modell über meine benutzerdefinierte Konto-Klasse zuzugreifen, wenn ich den Fehler erhalte. Jede Hilfe wird sehr geschätzt.

+0

versuchen, 'Namespace App \ Libraries;' in 'Namespace App ändern; ' –

+0

Habe es getan. Jetzt bekomme ich "Class 'App \ Libraries \ Account' not found". Aber der Klassenname Account.php ist dort in dem erwähnten Verzeichnis. Irgendeine Idee? –

+0

Namespace entfernen App \ AccountsModel; und benutze Namespace App; –

Antwort

5

Die Klasse AccountsModel bereits in use Abschnitt umfassen. Sie können also einfach AccountsModel anstelle von App\AccountsModel verwenden. Siehe den aktualisierten Code unter

<?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 
    } 
} 
?> 

Aktualisieren Sie Ihr Modell auf diese. namespace App; nur

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

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

} 

Auch ist dies nicht in composer.json erforderlich, da die AccountModel Teil App ist.

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

In Ihrer app/AccountsModel.php Datei sollte der Namespace App

namespace App; 

und es gibt keine Notwendigkeit, sein von dem folgenden Eintrag in composer.json Datei

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