2012-02-22 5 views
3

CI 모델의 특정 인스턴스에 대한 속성과 관련된 질문이 있습니다. 예 :CodeIgniter 모델 및 속성

project_model이라는 모델이 있습니다.

이 그것이라고
$total_projects = $this->project_model->Get_Projects($options); 

그래서 같은 모델의 속성을 생성합니다 : 모델에서는이 방법 칼레의 Get_Projects을 가지고

$query = $this->db->get('projects');//query 

$this->num_rows = $query->num_rows(); 

return $query->result(); 
메소드가 호출 된 그래서 후

컨트롤러에

, 나는 NUM_ROWS에 액세스해야합니다

$num_rows = $total_projects->num_rows; 

(나는 당신의 일부는 컨트롤러에서 NUM 행을 사용하여 뒤에 이유에 의문을 제기 할 수 있습니다 알고 그것은 페이지 매김 설정을 함께 할 수의 IT하지만 일을하는 더 나은 방법이있을 수 있습니다.. 오히려이 특정 프로젝트에 시간 없음)

내 문제는이 구문 오류가 생성 있다는 것입니다.

Severity: Notice 
Message: Trying to get property of non-object 
Filename: controllers/projects.php 
Line Number: 110 ($num_rows = $total_projects->num_rows;) 

첫째 이유입니다을? 나는 이것을 사용하려고 생각했다 : $ this-> project_model :: num_rows 대신에? 하지만 num_rows는 $ total_rows 객체에만 해당되지 않습니까? 따라서 전체 모델에만 적용됩니다.

BTW : 모델에 대한 CI 가이드를 읽었지만 모델 인스턴스를 만드는 데 대한 정보가 전혀 없습니다.

EDITED : 객체 고유의 num_rows 속성 결과가 필요합니다. 따라서 예 :

$a=$this->project_model->Get_Projects($options); 
$b=$this->project_model->Get_Projects($options); 
$num_rows = $this->project_model->num_rows; 

마지막 줄에는 $ b num_rows가 표시되고 $ a가 표시되지 않습니다. 그래서 객체 지향적으로 만들 수 있도록 어떻게 호출해야합니까? (분명히 변수의 두 번째 호출 전에 저장할 수 있습니다.)

+0

클래스 속성이 CI에 단일 값만 저장하기 때문에 실제로이 방법을 잘못 생각했다고 생각합니다. 결과()로 num_rows를 다시 보내야한다고 생각합니다. 그래서 저는 지금 그 코드를 가지고 놀고 있습니다. 현재 나는 이것을 가지고있다 : $ query = $ this-> db-> get ("projects"); $ result-> result = $ query-> result(); $ result-> num_rows = $ query-> num_rows(); (줄 바꿈이없는 주석에서는이 작업을 수행하기가 어렵습니다.) 기본적으로 결과에 대한 속성과 num_rows에 대한 속성을 만듭니다. 하지만 어떻게 사용하기 전에 결과를 선언해야합니까? var를 사용해야합니까? 지금 혼란스러워. – Adamantus

+0

또한 컨트롤러 측에서 list()를 사용하여 결과 및 num 행을 별도로 가져올 수 있고 변수를 만들 수 있습니다. – Adamantus

+0

나는 내 자신의 문제를 해결했다. 나는 내일 해결책을 게시 할 것이다. 100 Exp가 없기 때문에 허용되지 않습니다. – Adamantus

답변

1

필요할 때마다 모델을 인스턴스화 할 수 있습니다.

$object_one = new $this->project_model; 
$foo = $object_one->Get_Projects($options); 
var_dump($foo); 
echo $object_one->num_rows; 

$object_two = new $this->project_model; 
$bar = $object_two->Get_Projects($options); 
var_dump($bar); 
echo $object_two->num_rows; 

이렇게하면 각 모델 인스턴스의 속성을 별도로 가져올 수 있습니다.

+0

감사합니다. 이제 인스턴스를 수행하는 방법을 알고 있습니다. 이것이 문서에없는 이유는 무엇입니까? – Adamantus

+0

그것은 다소 기본적인 OOP입니다. 나는 당신을 처음부터 본 적이 있습니다. CI 자체는 단지 하나의 커다란 객체입니다 (var_dump ($ this)를 수행하고 브라우저가 멈추는 것을 지켜보십시오). – Rooneyl

+0

나는 그것을 수행하는 구문을 전혀 새롭게하지 않았습니다. $ object_one = 새 $ this-> project_model; 이상하게 보입니다. 자바를 배울 때 그것은 다음과 같을 것입니다 : Project object_one = new Project(); 예를 들면. – Adamantus

2

변수 $total_projects에 클래스 인스턴스가 없기 때문에 이러한 현상이 발생합니다. 여기에는 Get_Projects() 함수의 결과 만 포함됩니다.

당신은

+0

하지만 그게 인스턴스가 아닌가요? $ this-> project_model-> num_rows 일 뿐이며 total_rows에 대한 언급이 없습니다. 따라서 Get_Projects 메소드를 2 번 호출하면 $ this-> project_model-> num_rows의 결과가 호출마다 바뀝니다. 각 호출에 대해 개별 num_rows 속성을 다시 가져올 수 있어야합니다. – Adamantus

+0

댕! 테스트되지 않은 코드를 유감스럽게 생각합니다. – Indranil

+0

@Adamantus 더 잘 당신이 질문에이 요구 사항을 추가하십시오. –

0
****** Model **** 

class Project_model extends .... { 

    private $num_rows = 0; 
    public function Get_Projects($options){ 
     ..... 
     $query = $this->db->get('projects');//query 
     $this->num_rows = $query->num_rows(); 
     return $query->result(); 
    } 

    public get_num_rows(){ 
     return $this->num_rows; 
    } 
} 

**** Controller **** 

class Project extends .... { 
    function project(){ 
     ... 
     $total_projects = $this->project_model->Get_Projects($options); 
     $num_rows = $this->project_model->get_num_rows(); 
     ... 
    } 
} 

아니 완벽한 exaple 만한다.

num 행에 대해 하나, 결과에 대해 하나.

결과 만 반환하고 num 행은 반환하지 않습니다. 따라서 값을 반환하지 않습니다.

각 쿼리를 다른 기능으로 만드십시오. 그리고 그 함수에서 호출하십시오.

성능 측면에 대해서는 확실하지 않습니다.

1

더 나은 방법은 두 쿼리를 만드는 것입니다 .... 모든 일을 한 후, $num_rows = $this->project_model->num_rows (안된)를 시도 캡슐화의

+0

예, 방금 OP에이 옵션에 대해 의견을 말했습니다. – Adamantus