2015-02-04 2 views
0

Как использовать модель laravel Rloquent вне контроллера? Кажется, я не могу понять, что должно делать заявление use "*insert class here*". У меня есть вспомогательный класс, который часто будет использовать мою «Модель категории».Как использовать laravel Eloquent model in helper class

Вот код, который я использую. Он не работает, когда я использую Категория:

<?php 

namespace Msh\Redirects; 

use Illuminate\Support\Facades\Config as Config; 
use Illuminate\Support\Facades\Input as Input; 


/** 
* This is the actual "product class" that generates the 301 redirect url's 
* 
* This is the product 
* 
* @author bgarrison 
*/ 
class StorefrontRedirectsGenerator implements RedirectsGenerator { 

    public function generateUrls() { 
     // Set the database to the name of the domain 
     Config::set('database.connections.mysql_tenant.database', Input::get('domain')); 

     // Grab all the categories 
     $categories = Category::all(); 

     // Use category information to determine request url's and target url's 
     $urlMapping = []; 
     $count = 0; 
     $categoryCount = 0; 
     foreach ($categories as $category) { 
      if ($category->Published == 1) { 
       $oldUrl = 'c-' . $category->CategoryID . '-' . $category->SEName . '.aspx'; 
       $urlMapping['category_urls'][$oldUrl][] = $category->SEName . '.html'; 
       $count++; 
       $categoryCount++; 
      } 
      if ($category->ParentCategoryID !== '0') { 
       $parentCategory = Category::where('CategoryID', '=', (int) $category->ParentCategoryID)->get(); 
       foreach ($parentCategory as $pcategory) { 
        $url = $pcategory->SEName . '/' . $urlMapping['category_urls'][$oldUrl][0]; 
        if (!in_array($url, $urlMapping['category_urls'][$oldUrl])) { 
         $urlMapping['category_urls'][$oldUrl][] = $url; 
         $count++; 
         $categoryCount++; 
        } 
       } 
      } 
     } 
     $urlMapping['category_urls']['count'] = $categoryCount; 
     return Response::json([ 
       'success' => true, 
       'count' => $count, 
       'data' => $urlMapping 
     ]); 
    } 

} 

ответ

2

Если ваша модель не находится в пространстве имен (настройка по умолчанию с Laravel 4). Добавьте это:

use Category; 

Если он находится внутри пространства имен:

use Your\Namespace\Category; 

Конечно, вы можете напрямую указать полное имя класса. Это означает, что если ваш класс не имеет пространства имен (существует в глобальном пространстве имен) вы используете обратную косую черту, чтобы убедиться, что вы ссылаетесь на это абсолютное, а не относительно текущего пространства имен:

$categories = \Category::all(); 

И если класс случается в пространство имен, просто укажите полный путь:

$categories = Your\Namespace\Category::all(); 
+0

Это сделал это! Благодаря тонну. Я все еще привыкаю к ​​расширению имен после всех этих лет :) –

+0

Добро пожаловать :) – lukasgeiter

+0

Отметьте его как ответ как можно скорее –

0

Все должно быть в порядке. Вы либо объявить об этом так:

use Category; 

или

use Namespace\If\Any\Category; 

перед ваш вспомогательный класс, а остальное оставьте как есть.

Или использовать его таким образом:

$categories = \Category::all(); 

или

$categories = Namespace\If\Any\Category::all(); 
+0

Мне жаль, что я не могу отметить оба из них в качестве ответа, но, как ответил lukas, сначала я буду отмечать это как ответ. –

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