2013-08-08 3 views
1

저는 Laravel에 사용자 집합이있는 회사를위한 온라인 도구를 만들고 있습니다.Laravel의 모든 요청에 ​​조건 추가

사용자가 연결되어

, 그는 (기준 : 모든 (전화),() 발견, ...) 모든 SELECT 요청에 대한 $connected_company_id 변수

  • , 내가 항목을 추가 할 수있다 조건 : where company_id = $connected_company_id. 이 게시물을 찾았습니다 : laravel set an automatic where clause, newQuery()를 재정 의하여 작동하지 않습니다.

  • 모든 INSERT 요청에 대해 company_id를 추가하고 싶습니다.

모든 컨트롤러 내부에 내 코드를 변경하지 않고이 가능 인가?

customEloquent으로 Eloquent를 확장 한 다음 내 모델을 customEloquent으로 확장하려고했지만 customEloquent에 대한 코드를 작성하는 방법과 작동 여부를 알 수 없습니다.

답변

0

글쎄, 회사 ID를 찾기 쿼리에 추가하면됩니다. Model::where("company_id","=",$company_id): 아니면 범위 만들 수 있습니다

class theModel extends Eloquent { 
    static $company_id; 
    static for_company($company_id){ 
      self::company_id=$company_id; 
      return __CLASS__; 

    } 

    public function scopeCompany($query) 
    { 
     return $query->where('company_id', '=', self::company_id); 
    } 

} 
//And later 
$scope=theModel::for_company($company_id); 
$res=$scope::company->where(...); 

면책 조항 :이 시도하지 않은. 내가 만든 솔루션. 이것이 작동하는지 알려주세요. PHP 5.3에서는 작동하지 않습니다.

+0

쿼리 범위에 대해 알고 있었지만 범위를 지정하지 않고도 주어진 모델을 사용할 때마다이 범위를 갖고 싶습니다. 예를 들어 theModel :: all은 company_id가있는 모델 만 제공해야합니다. 다른 점 : 이것은 SELECT 요청을위한 것입니다. 아무 래도 save() (두 번째 글 머리 부분 참조)에 company_id를 추가하지 않습니다. – edi9999

1

음, Eloquent Model Events를 사용할 수 있습니다. 난 당신이 세션 company_id

class BaseModel extends Eloquent{ 

    public static function boot(){ 
     parent::boot(); 
     //Column to inject when inserting 
     static::creating(function ($obj){ 
      $obj->company_id = Session::get('company_id'); 
     }); 

     //Column to inject when updating 
     static::updating(function ($obj){ 
      $obj->company_id = Session::get('company_id'); 
     }); 
    } 
} 

당신은 당신이 COMPANY_ID 삽입하거나 업데이트 할 모든 모델에 BASEMODEL 클래스를 확장 할 수 있습니다에 저장된 connected_company_id을 가정합니다. 자세한 내용은 Eloquent Model Events을 참조하십시오.

위의 코드는 company34id를 BaseModel으로 확장 한 모델에 자동으로 삽입하거나 업데이트합니다. Model::all() 또는 Model::get()을 수행하면 해당 모델에서 company_id가 자동으로 표시되고 요청한대로 검색을 수행 할 수 있습니다. 포인트 '

희망이 도움이 될 것입니다.

+0

모델 :: all() 및 Model :: get()은 모델을 필터링하지 않습니다. 여기에'company_id == Session :: get ('company_id')'가 있습니다. – edi9999

+0

첫 번째 글 머리 점에 대해, 나는이 게시물을 발견 : http://stackoverflow.com/questions/14271812/laravel-set-an-automatic-where-clause,하지만 그것은 Laravel 4에서 작동하지 않는 것 (심지어 newQuery()) – edi9999

+0

그래서 필터를 자동으로 처리하려고합니다. 귀하의 포인터에서 나는 당신이 조건을 모든 곳에 추가하기를 원한다는 것을 알기 때문입니다. –

관련 문제