2016-05-12 79 views
0

我有一個模型機鋒叫(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); 
    } 
} 

的想法是不是有時會忽略的範圍,這是當你需要它來使用它。

如果你真的想沒有範圍的模型是例外,從TicketModelSimpleTicketModel繼承和覆蓋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