>  기사  >  백엔드 개발  >  YII2 데이터베이스 쿼리 연습

YII2 데이터베이스 쿼리 연습

PHP中文网
PHP中文网원래의
2016-08-04 09:20:091329검색

이 글은 주로 YII2 데이터베이스 쿼리 실습에 대한 관련 정보를 소개합니다. 필요한 친구는

yii2 프레임워크의 예비 탐색, 추가, 삭제, 수정을 참조하세요. , 관련 쿼리 등 기본적인 데이터베이스 작업을 간단하게 연습합니다.

데이터베이스 구성.

/config/db.php 데이터베이스 구성

연습 중에 테스트 라이브러리 - "test table -" 두 레코드는 다음과 같습니다.

mysql> 테스트에서 ;
---- --------
| ID |
---- --------
| 🎜> | 2 |
---- --------
세트 내 18개 행(0.00초)

sql 쿼리 방법

yii2는 원본 데이터베이스를 제공합니다. 쿼리 방법은 findBySql이며 동시에 기본 SQL 주입 방어는 자리 표시자를 통해 자동으로 수행됩니다. 위 코드

// 가장 기본적인 쿼리 방법

$sql = "select * from test where 1";
$res = Test::findBySql($sql)->all() ;
var_dump(count($res)) // res->2
// findbysql은 SQL 삽입을 방지합니다
$id = '1 or 1=1';
$sql = "select * from test where id = " . $id;
$res = Test: :findBySql($sql)->all();
var_dump(count($res)); // res-> 2
$sql = "select * from test where id = :id" ;
// 로케이터는 자동으로 SQL 삽입을 방지합니다
$res = Test::findBySql($sql,array(":id"=>$id))->all();
var_dump (count($res)); // res->1

activeRecord 쿼리 메서드

각 프레임워크는 원래 SQL 메서드 외에 해당 캡슐화를 제공합니다. 쿼리 메서드는 다음과 같습니다. yii2와 동일합니다.

모델 생성

yii의 모델의 기본 방법은 다음과 같습니다. 아래에서는 코드에 대해 자세히 설명하지 않습니다.

namespace appmodels;
yii 사용;
yiidbActiveRecord 사용;
class 테스트 확장 ActiveRecord
{
// 선택 사항, 해당 테이블: If 기본 클래스 이름이 테이블 이름과 일치하므로 이 함수는 필요하지 않습니다.
public static function tableName()
{
return 'test';
}
// 선택 사항, 유효성 검사기: 주로 각 필드 확인
공개 함수 규칙(){
return [
['id', 'integer'],
['name', 'string', 'length' => 0, 100]],
];
}
}

사용 시 모델 소개가 필요합니다

appmodelsTest;

추가 작업
// 작업 추가
$test = new Test();
$test->name = 'test';
// 유효성 검증
$test->validate() ;
if($test->hasErrors()){
echo "데이터가 불법입니다.";
die;
}
$test->save();

쿼리 작업

쿼리 작업은 먼저 공식 문서

activeRecord doc

where doc

라는 점을 강조해야 합니다. : yii 쿼리 제공 코드 내 일괄 쿼리 처리 등 풍부한 라이브러리가 많이 있습니다. 자세한 내용은 설명서를 참조하세요.

// 선택

// id = 1
$res = Test::find()->where(['id' => 1])->all() ;
var_dump(count($res)); //1
// id > 0
$res = Test::find()->where(['>','id ',0])->all();
var_dump(count($res)); //2
// id > id <=2
$res = 테스트: :find()->where(['between','id',1,2])->all();
var_dump(count($res)) //2
// name 필드 like
$res = Test::find()->where(['like', 'name', 'cuihuan'])->all();
var_dump(count($res) )); //2
// 쿼리 사용법 obj->array
$res = Test::find()->where(['between','id',1,2]) - >asArray()->all();
var_dump($res[0]['id']) //2
// 일괄 쿼리, 대용량 메모리 작업을 위한 일괄 쿼리
foreach (Test::find()->batch(1) as $test) {
var_dump(count($test));
}

삭제 작업

// 삭제

// 선택 및 삭제
$res = Test::find()->where(['id'=>1])->all();
$res[0] ->delete();
//직접 삭제
var_dump(Test::deleteAll('id>:id', array(':id' => 2)));

수정 작업

yii2는 코드 메서드 외에도 업데이트 작업을 직접 제공합니다.

// 활동 기록 수정

$res = Test::find()->where(['id'=>4])->one();
$res ->name = "update";
$res->save();

관련 쿼리 작업

관련 쿼리 예시의 두 테이블:

학생 테이블(student): id, name;

점수 테이블(score): id, stu_id, Score

// 해당 학생의 모든 점수

$ stu = Student::find()->where(['name'=>'xiaozhuai'])->one();
var_dump($stu->id);
// 기본 가져오기
$scores_1 = $stu->hasMany('appmodelScore',['stu_id'=>$stu->id])->asArray()->all();
$ Score_2 = $stu->hasMany(Score::className(),['stu_id'=>'id'])->asArray()->all();
var_dump($scores_1) ;
var_dump($scores_2);

두 개의 관련 쿼리 메서드가 있지만 컨트롤러에서 관련 작업을 수행할 때 코드가 너무 혼란스러워 호출이 모델에 캡슐화됩니다.

먼저 학생 모델에서 관련 연관 호출 기능을 캡슐화합니다

네임스페이스 appmodels;
Yiii 사용;
yiidbActiveRecord 사용;
class Student 확장 ActiveRecord
{
공용 정적 함수 tableName()
{
return 'student';
}
// 점수 정보 가져오기
공용 함수 getScores()
{
$scores = $this->hasMany(Score::className(), ['stu_id' => 'id'])->asArray()->all();
$scores를 반환합니다.
}
}

직후 호출, 두 가지 호출 방법

// 함수 캡슐화 후 호출
$scores = $stu->getScores() ;
var_dump($scores);
//__get의 자동 호출 방법 사용
$scores = $stu->scores;
var_dump($scores);

마지막으로

위 내용은 yii2 배포 및 사용 시 추가, 삭제, 수정, 조회, 관련 조회 등 기본적인 작업들입니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.