2016-05-12 2 views
0

У меня есть модель Eloquent называется (TicketModel),Laravel 4,2 и игнорировать глобальный масштаб

добавить глобальный масштаб для принимать все билеты на пользователя, но иногда, я хочу использовать билет без этого объема, как можно сделать Это? как можно игнорировать эту область

это модель

<?php 
class TicketModel extends Eloquent{ 

    public $timestamps = false; 

    public static function boot() 
    { 
     static::addGlobalScope(new TicketScope); 

    } 


} 

use Illuminate\Database\Eloquent\Builder; 
use Illuminate\Database\Eloquent\ScopeInterface; 

class TicketScope implements ScopeInterface { 

    public function apply(Builder $builder) 
    { 
     $builder->where('user_id', '=', Auth::user()->id_user); 
    } 

    public function remove(Builder $builder){} 

} 

ответ

1

насчет иметь класс ребенка, за исключением случаев вам нужен объем?

Вот пример:

class TicketModel extends Eloquent 
{ 
    // Your model stuff here 
} 

class UserTicketModel extends TicketModel 
{ 
    public static function boot() 
    { 
     static::addGlobalScope(new TicketScope); 
    } 
} 

Идея заключается в том, чтобы не обращать внимания на объем иногда, это использовать его, когда вам это нужно.

Если вы действительно хотите, чтобы модель без рамки, чтобы быть исключением, пусть SimpleTicketModel наследует от TicketModel и переопределить boot() метод, так что он не использует рамки, как это:

class TicketModel extends Eloquent 
{ 
    public static function boot() 
    { 
     static::addGlobalScope(new TicketScope); 
    } 
} 

class SimpleTicketModel extends TicketModel 
{ 
    public static function boot() 
    { 
     // Do nothing else 
    } 
} 
+0

, но у меня есть еще чем 15 моделей, необходимо расширять все классы. – mubarmg

+0

Расширение классов - это одноразовая задача. В какой-то момент вам нужно сказать своей модели, что вам не нужна область действия. Другой способ - вызвать метод каждый раз, когда вы хотите игнорировать область действия (до создания экземпляра модели), что означает, возможно, несколько раз в одном заданном скрипте ... Расширение классов не имеет большого значения: как только это будет сделано, все будет сделано. И ваша модель имеет имя, которое означает, что это такое. Кстати, вы можете использовать его для Type Hinting. – Arcesilas

+0

Контейнер Laravel 5.2 позволяет [контекстное связывание] (https://laravel.com/docs/5.2/container#contextual-binding), что может быть полезно в вашем случае ... Но Laravel 4.2 ...:/ – Arcesilas

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