2015-02-23 12 views
5

ich habe ein Problem mit Laravel 5 Route Modell Bindung ich folgende Controller-Methode bin mitLaravel 5 Route Modell arbeitet Bindung nicht auf dem Server

public function destroy(PrimaryLocation $primaryLocation) { 
    dd($primaryLocation->id); 
    $primaryLocation->delete(); 
    return redirect()->back()->with('locationDeleted', true); 
} 

Wo PrimaryLocation ist ein beredtes Modell

Mein RouteServiceProvider Stiefel Funktion:

public function boot(Router $router) 
{ 
    parent::boot($router); 

    $router->model('user', 'App\User'); 
    $router->model('PrimaryLocation', 'App\PrimaryLocation'); 
} 

Und in meinem routes.php

Route::delete('deletePrimaryLocation/{PrimaryLocation}', 
       ['as' => 'admin.deletePrimaryLocation', 'uses' => '[email protected]']); 

Dieses Setup funktioniert auf meinem lokalen Computer, aber wenn ich die Dateien auf meinem Entwicklungsserver bereitstellen, bricht die Modellbindung ab; Der Standort wird beim Ausführen der Methode nicht gelöscht.

Ich habe einige var_dumps

dd($primaryLocation->id); 

auf dem lokalen Computer dies die korrekte ID zurückgibt, sondern auf dem Server wird es nur null zurück;

Allerdings, wenn ich ein

dd($primaryLocation) 

Das Ergebnis lokal

PrimaryLocation {#178 ▼ 
    #fillable: array:1 [▶] 
    #connection: null 
    #table: null 
    #primaryKey: "id" 
    #perPage: 15 
    +incrementing: true 
    +timestamps: true 
    #attributes: array:4 [▶] 
    #original: array:4 [▶] 
    #relations: [] 
    #hidden: [] 
    #visible: [] 
    #appends: [] 
    #guarded: array:1 [▶] 
    #dates: [] 
    #casts: [] 
    #touches: [] 
    #observables: [] 
    #with: [] 
    #morphClass: null 
    +exists: true 
    } 

On auf meinem Server ist fast das gleiche ... aber die Attribute fehlen:

 PrimaryLocation {#195 ▼ 
    #fillable: array:1 [▶] 
    #connection: null 
    #table: null 
    #primaryKey: "id" 
    #perPage: 15 
    +incrementing: true 
    +timestamps: true 
    #attributes: [] 
    #original: [] 
    #relations: [] 
    #hidden: [] 
    #visible: [] 
    #appends: [] 
    #guarded: array:1 [▶] 
    #dates: [] 
    #casts: [] 
    #touches: [] 
    #observables: [] 
    #with: [] 
    #morphClass: null 
    +exists: false 
} 

Hat jemand eine Ahnung, was schief gehen könnte?

[UPDATE]

wenn ich

// $router->model('PrimaryLocation', 'App\PrimaryLocation'); 

In mir Serviceprovider auf Kommentar, ist das lokale Verhalten der gleiche wie auf dem Server. Vielleicht stimmt etwas mit dem Laden des ServiceProviders nicht? Vielleicht gibt es eine Art Cache?

+0

Das fehlende 'attributes' ist, weil es nicht den Datensatz finden. Sind die Daten in der Datenbank gleich? d.h. dieselbe Datenbank, Tabellen und Felder? Speziell - existiert der Datensatz selbst? – Laurence

+0

Ist Ihr Dateiname auf dem Server korrekt? Ist es 'PrimaryLocation.php mit der Groß-/Kleinschreibung gleich? – Laurence

+0

Wenn es den Datensatz nicht finden konnte, sollte es einen 404 Fehler geben (zumindest die Dokumente geben dies an), wenn ich richtig bin. Und wenn der Dateiname nicht korrekt ist, sollte es einen "harten" Fehler geben ... (Whoops, was schief gelaufen ist) –

Antwort

9

Nach dem gleichen Problem, entdeckte ich, dass in der Produktion storage/framework/compiled.php nicht regelmäßig wie im Entwicklungsmodus neu aufgebaut wird.

Im Grunde führen Sie nur eine alte Version von RoutesServiceProvider.php auf Ihrem Produktionsserver aus.

Die Lösung ist jedoch einfach genug. Führen Sie einfach php artisan clear-compiled.

Es wäre eine gute Übung, auch Zeilen zu Deployment-Skripten hinzuzufügen.

+2

Heiliger Mist danke. Ich wurde verrückt – Grant

-1

fügen Sie einfach diese Zeile serviceprovider :: Boot()

$router->model('attribute', Attribute::class); 
Verwandte Themen