2013-03-09 2 views
0

은 codeigniter를 해킹하여 기본적으로 insert/update를 수행 할 때 timespan 및 user_id를 테이블의 특정 열에 삽입 할 수있는 방법입니까?모든 작성 쿼리에 대한 글로벌 작성자, timespan

내가 데이터베이스에 8 개 테이블이 모두 내가를 automaticly 같은 개념 또한 update_time=time() and update_by=$this->session->userdata('user')->id;

을 채우고 갱신/삽입을 발생하는 때 이제까지 있도록 CodeIgniter의 활동 기록을 설정하려면, (UPDATE_TIME, updated_by) 열을 포함 전 (MySQL 데이터베이스 사용자가 레코드 액세스를 삭제하지 않으므로) 대신 컬럼을 삭제 (아카이브) = 1로 삭제 작업을 해킹하고 싶습니다.

이 가능합니까?

답변

1

/드라이버/DB_Active_rec.php는 예를 들어

(당신이 CI의 활성 기록 기능을 사용하는 것이 주어진), 당신은 현재 시간을 삽입 할 수 있습니다 해당 파일의 업데이트 메소드를 수정하여 업데이트합니다. 에

public function update($table = '', $set = NULL, $where = NULL, $limit = NULL) 
{ 
    // Combine any cached components with the current statements 
    $this->_merge_cache(); 

    if (! is_null($set)) 
    { 
     $this->set($set); 
    } 
      [...] 

: 방법에

public function update($table = '', $set = NULL, $where = NULL, $limit = NULL) 
{ 
    // Combine any cached components with the current statements 
    $this->_merge_cache(); 

    // start of Insert updated_time hack 
    $time_format = 'Y-m-d H:i:s'; 
    $set['update_time'] = date($time_format); 
    // end of hack 

    if (! is_null($set)) 
    { 
     $this->set($set); 
    } 
      [...] 
0

레코드를 삽입하거나 업데이트 할 때 기존 functionality of mysql을 사용하여 update_time 열을 자동으로 업데이트 할 수 있습니다. 그러나 user_id을 업데이트하면 응용 프로그램에서 수동으로 수행해야 할 작업입니다.

귀하의 다른 요구 사항은 일반적으로 소프트 삭제으로 불립니다. 일부 사용자는 열의 깃발을 돌려서 행을 삭제 된 것으로 표시합니다. 이 작업은 가능하지만 모든 선택 및 업데이트 쿼리가이 플래그가 켜져있는 행을 피하고 있는지 확인해야합니다.

Model 메서드를 신중하게 구성하여 응용 프로그램의 이러한 두 가지 요구 사항을 준수하는 것이 가장 좋습니다. 아마도 extending the core Model의 CI를 사용하여 MY_Model을 확장하는 모든 하위 클래스에서 사용되는 사용자 정의 된 업데이트/선택 쿼리를 가질 수 있습니다. 당신은 당신이 시스템에 보일 것입니다 이러한 목표를 달성하기 위해 CI를 해킹하려는 경우

+0

어떤 설명이 변경? – Zalaboza

+0

그 * 할 * 내 * 설명 * 할 *. 지금까지 해본 적이있는 응용 프로그램의 절반을 작성할 수 없습니다. – dakdad