수동 조인을 사용하지 마십시오. Active Record를 사용하면이 작업을보다 쉽게 수행 할 수 있습니다. 그러나 전체 "단계별 프로세스"를 제공한다고해서 실제로 생각만큼 도움이되지는 않습니다. 기본 사항을 직접 배우고 구체적인 질문을해야합니다. 이 대답이 너무 혼란 스럽다면 Alfredo가 옳다. 계속하기 전에 프레임 워크를 배우는 데 더 많은 시간을 할애해야한다.
1 단계 : 각 모델에서 테이블 관계를 지정하십시오. 데이터베이스 스키마가 외래 키를 사용하면 (그것은 절대적으로 는한다), 다음 gii
모델 발생기 그렇지 않으면 수동으로 선언 할 필요가 자동으로 다음을 확인할 수 있습니다
/**
* @property Record[] $records
*/
class Student extends CActiveRecord {
// other code...
public function relations() {
return array(
// other relations
array('records', self::HAS_MANY, 'Record', 'stud_id'),
);
}
}
/**
* @property Student $student
*/
class Record extends CActiveRecord {
// other code...
public function relations() {
return array(
// other relations
array('student', self::BELONGS_TO, 'Student', 'stud_id'),
);
}
}
2 단계 : 액티브 레코드와를 사용 컨트롤러 동작의 관계. 이것은 당신이하려는 일에 크게 의존합니다.
예 : 한 명의 학생을 모든 기록으로로드하십시오. 액션에 직접 데이터를 출력한다는 점에 유의하십시오. 이것은 나쁜 생각이며 간단하게하기 위해 여기에서 사용합니다. 실제 애플리케이션에서는이 데이터 대신 뷰를 렌더링하려고합니다.
public function actionStudentInfo($id) {
$student = Student::model()->with('records')->findByPk($id);
if(!$student) {
throw new CHttpException(404, "Student not found!");
}
echo "<h2>Found the requested student with details:</h2>",
"<pre>", htmlspecialchars(print_r($student->attributes, true)), "</pre>";
if(count($student->records)) {
echo "<h3>Student records:</h3>", "<ul>";
foreach($student->records as $record) {
echo "<li><pre>", htmlspecialchars(print_r($record->attributes, true)), "</pre></li>";
}
echo "</ul>";
} else {
echo "<p>Student has no records...</p>";
}
}
핵심 부분은 ->with('records')
입니다. 이는 Active Record 시스템에 Student 모델의 records
관계 데이터를 쿼리에 포함하도록 지시합니다. 액티브 레코드는 그 관계를 읽어서 질의와 반환 된 결과에 포함시킵니다. Student
의 Records
은 $student->records
(이것은 배열이됩니다)에서 사용할 수 있습니다.
관계 사양에 추가 할 수있는 많은 세부 정보가 있습니다. 예를 들어 주문을 시행하려면 특정 순서없이 해당 레코드를 가져오고, 'order' => 'field_name ASC'
을 지정할 수 있습니다.
활성 레코드 사용에 대한 자세한 내용은 Yii 설명서에서 Active Record, Relational Active Record입니다.
당신은 무엇을해야할지 모른다. 나는 당신이 yii 더 깊이 배울 것을 제안합니다. –