2015-02-23 5 views
5

у меня есть проблема с Laravel 5 Route Model Binding Я использую следующий контроллер методLaravel 5 Route Модель Binding не работает на сервере

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

Где PrimaryLocation красноречивая Модель

загрузки

Моих RouteServiceProvider в функция:

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

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

И в моем routes.php

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

Эта настройка отлично работает на моем локальном компьютере, но когда я развертываю файлы на своем сервере разработки, то где-то происходит разрыв привязки модели; Местоположение не будет удалено при выполнении метода.

Я некоторые var_dumps

dd($primaryLocation->id); 

на локальном компьютере это возвращает правильный идентификатор, но на сервере она просто возвращает нуль;

Однако, если я делаю

dd($primaryLocation) 

В результате локально

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 
    } 

На на моем сервере почти то же самое ... но атрибуты отсутствуют:

 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 
} 

Кто-нибудь знает, что может пойти не так?

[UPDATE]

если я закомментировать

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

В меня ServiceProvider, локальное поведение такое же, как и на сервере. Возможно, что-то случилось с загрузкой ServiceProvider? Может быть, есть какой-то кеш?

+0

Отсутствующий 'attributes' потому, что он не может найти запись. Являются ли данные одинаковыми в базе данных? т.е. та же база данных, таблицы и поля? В частности - существует ли сама запись? – Laurence

+0

Правильно ли указано ваше имя на сервере? Это 'PrimaryLocation.php' с чувствительностью к регистру? – Laurence

+0

Если он не смог найти запись, должна быть ошибка 404 (при условии, что документы указывают это), если я прав. И если имя файла неверно, должна быть какая-то «жесткая» ошибка ... (Упс что-то пошло не так) –

ответ

9

После прохождения той же самой проблемы я обнаружил, что в процессе производства storage/framework/compiled.php не восстанавливается повторно, как в режиме разработки.

В основном, вы используете только старую версию RoutesServiceProvider.php на вашем производственном сервере.

Исправление достаточно легко, хотя. Просто запустите php artisan clear-compiled.

Было бы неплохо добавить строку в любые сценарии развертывания.

+2

Святое дерьмо спасибо. Я сошел с ума – Grant

-1

просто добавьте эту строку в ServiceProvider :: ботинке()

$router->model('attribute', Attribute::class); 
Смежные вопросы