2012-12-25 3 views
1

나는 Kohana의 다른 관련 테이블에서 데이터를 가져 오는 방법을 찾고 있습니다.kohana ORM foreign_key

class Model_File extends ORM { 

    protected $_belongs_to = array 
    (
    'student' => array ('foreign_key' => 'student_id') 
    ); 
} 

그런 다음 세션 테이블 : :

class Model_Filesession extends ORM { 

    protected $_primary_key = 'id'; 
    protected $_table_name = 'file_sessions'; 


    protected $_belongs_to = array 
    (
    'file'  => array ('modele'=> 'file'  , 'foreign_key' => 'file_id' ), 
    'subject' => array ('modele'=> 'subject' , 'foreign_key' => 'subject_id' ), 
    'place'  => array ('modele'=> 'place'  , 'foreign_key' => 'place_id' ), 
    'teacher' => array ('modele'=> 'teacher' , 'foreign_key' => 'teacher_id' ) 
    ); 

} 

그래서이 filesession와 학생 사이의 직접 링크가 없습니다 ... 그래서 내가 할 수있는 '

나는으로 정의 된 파일 테이블이 파일 시스템 세션 참여 (-> ('학생'))

현재이 작업을 수행하고 있습니다 :

 $fileSessions = ORM::factory('filesession') 
     ->with('subject') 
     ->with('teacher') 
     ->with('place') 
     ->with('file') 
     ->where('payment_id','=',$payment_id) 
     ->order_by('sessionDate','DESC') 
     ->find_all(); 

어떻게이 쿼리를 student 테이블의 JOIN으로 수정할 수 있습니까? 다른 단어에서

... 난 그냥 다음을 추가해야합니다

INNER JOIN students ON students.id = file.student_id 

하지만 Kohana ORM

편집을 사용하여

class Model_Student extends ORM { 

    protected $_has_one = array(
    'file' => array(
    'model'  => 'file', 
    'foreign_key' => 'student_id', 
    ), 
    ); 

    protected $_belongs_to = array 
    (
    'level' => array ('foreign_key' => 'level_id') 
    ); 

} 
+0

http://kohanaframework.org/3.3/guide-api 일 것/ORM # 가입 하시겠습니까? – biakaveron

+0

도움이 될 수도 있습니다 : http://stackoverflow.com/questions/3286539/kohana-3-orm-how-to-perform-query-with-2-many-to-many-relationships – dzeno

답변

1

당신은 사용할 수 있습니다 (학생 모델 추가) joinon은 DB 쿼리 빌더에서와 동일합니다.

$fileSessions = ORM::factory('filesession') 
    ->with('subject') 
    ->with('teacher') 
    ->with('place') 
    ->with('file') 
    ->join(array('students','student'))->on('student.id', '=', 'file.student_id') 
    ->where('payment_id','=',$payment_id) 
    ->order_by('sessionDate','DESC') 
    ->find_all(); 

또는 파일 모델에 $_load_with 속성을 사용할 수 있습니다. 자동으로로드가 이루어 지므로 전화를 걸 때 두 번째가 필요하지 않습니다. 당신이 File 모델을로드 할 때

class Model_File extends ORM { 

    protected $_belongs_to = array 
    (
    'student' => array ('foreign_key' => 'student_id') 
); 
    protected $_load_with = array('student'); 
} 

자동 $file->student를 사용하여 액세스 할 수 있습니다, 그리고 Filesession에 예를 들어, $filesession->file->student

+0

나는 수정이 가능하다고 생각했습니다. 그것을 만들기위한 모델 정의. – Tarek

+0

학생 모델 정의로 게시물을 업데이트하면 도움이 될 것입니다. ORM 모듈의 명명 규칙을 사용하고 있는지 확인해야합니다. – pocesar

+0

Ok, 질문을 업데이트했습니다. – Tarek