2015-05-28 3 views
4

Недавно я обновил свой проект от laravel 4.2 до laravel 5.0 и столкнулся с несколькими ошибками.Laravel 5.0, не может обновить класс App models Категория

Я не определял никаких пространств имен в версии 4.2, но, как предложил here,

Я начал определение пространства имен в моем коде. Я не знаю, связана ли с этим проблема, с которой я столкнулся, но это произошло в середине этого процесса.

Я получаю следующее сообщение об ошибке при выполнении кода:

exception 'Symfony\Component\Debug\Exception\FatalErrorException' with 
message 'Cannot redeclare class App\models\Category' in 
/Users/yash/summers/lightsCameraDinner/lcd_updated/app/models/Category.php:19 

Вот мой category.php:

<?php namespace App\models; 

use Eloquent; 

class Category extends Eloquent { 

    protected $table = 'categories'; 
    protected $guarded = array('id'); 

    // Defining 'Many to Many' Relationship with 'VendorProfile' Model 
    public function clients() { 
    return $this->belongsToMany('Client'); 
    } 

    // Defining 'One to Many' Relationship with 'Job' Model 
    public function jobs() { 
    return $this->hasMany('Job'); 
    } 
} 

Я искал подобные ошибки на SO, но не нашел Любые.

Это функция в моем контроллере, которая вызывается по маршруту «/».

public function getIndex() { 
    $categories = Category::all(); 

    $messages = Message::groupBy('receiver_id') 
       ->select(['receiver_id', \DB::raw("COUNT('receiver_id') AS total")]) 
       ->orderBy('total', 'DESC') 
       ->get() 
       ->toArray(); 

    $vendors_ids = array(); 
    foreach ($messages as $message) { 
     $vendors_ids[] = $message['receiver_id']; 
    } 

    $clients = Client::where('profile_type', 'VendorProfile') 
         ->where('is_activated', 1) 
         ->whereIn('id', $vendors_ids) 
         ->limit(4) 
         ->get(); 

    if($clients->count() < 4) { 
     $clients = Client::where('profile_type', 'VendorProfile') 
         ->where('is_activated', 1) 
         ->limit(4) 
         ->get(); 
    } 
    Log::info('getIndex function of PagesController'); 
    $this->layout = View::make('layouts.homepage'); 
    $this->layout->content = View::make('pages/index', ['categories' => $categories, 'clients' => $clients]); 
    return $this->layout; 
    } 

Дайте мне знать, если вам нужно что-нибудь еще из кода. Я уже давно пытаюсь найти решение.

+0

Есть ли у вас еще один «класс категории» в том же пространстве имен? – DavidDomain

+0

Нет, не знаю. Раньше у меня было все в глобальном пространстве имен, поэтому я бы ошибся в то время, только думаю. Во-вторых, эта категория находится в пространстве имен приложений \ models, и у меня нет другой модели с именем в этом пространстве имен. – Yashasvi

+0

Ошибка указывает на Category.php: 19, вот где заканчивается файл. Что это значит? – Yashasvi

ответ

9

Это потому, что вы создали контроллер, а затем перетащили его в подпапку. Вам нужно просто изменить пространство имен вправо или сгенерировать ваш контроллер правильно.

php artisan make:controller Api/CategoryController 

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

namespace App\Http\Controllers\Api; 

(если апи это имя папки контроллер находится в)

0

Я знаю, вопрос старый, но я отвечу, что есть работал на меня. Я недавно тестировал обновление Laravel 4.2 до 5.0 на ветке git. У меня была та же проблема с классом модели с именем Megaloquent, который расширяет Eloquent в Laravel 4.2, который теперь является моделью.

Потому что я пытался заставить его работать без имен в самом начале, я добавил приложение/subdirecties в classmap из composer.json

"autoload": { 
    "classmap": [ 
     "database", 
     "app/Http/Controllers", 
     "app/Http/Controllers/Auth", 
     "app/Models", 
     "app/Libraries" 
    ], 
    "psr-4": { 
     "App\\": "app/" 
    } 
}, 

И после того, как много хлопот получать его на работу, Я решил пойти с пространством имен в контроллерах и моделях, которые я нахожу теперь более структурированными и оптимизированными. Вы должны удалить приложение/Controllers-Models-Libraries из classmap, поскольку psr-4 уже загружает все классы в app/{subdirectories}/classes, а classmap autoload делает это дважды. Вы получите только это после удаления их

"autoload": { 
    "classmap": [ 
     "database" 
    ], 
    "psr-4": { 
     "App\\": "app/" 
    } 
}, 

Это Laravel внутренней конфигурации, что вы не можете контролировать, но их удаление было исправлена ​​ошибка для меня.

Смежные вопросы