laravel 프레임 워 크 데이터베이스 조작,조회 구축 기,Eloquent ORM 조작 실례 분석

본 고의 실례 는 laravel 프레임 워 크 데이터베이스 조작,조회 구축 기,Eloquent ORM 조작 을 다 루 었 다.여러분 께 참고 하도록 공유 하 겠 습 니 다.구체 적 으로 는 다음 과 같 습 니 다.
1.데이터베이스 연결
laravel 연결 데이터베이스 설정 파일 은 config/database.php 에 있 습 니 다.그 중에서 connection 필드 에 laravel 이 지원 하 는 데이터베이스 설정 정 보 를 포함 하고 호스트,포트,데이터 베이스,사용자 이름,비밀번호 등 정 보 를 볼 수 있 습 니 다.

'mysql' => [
  'driver' => 'mysql',
  'host' => env('DB_HOST', 'localhost'),
  'port' => env('DB_PORT', '3306'),
  'database' => env('DB_DATABASE', 'forge'),
  'username' => env('DB_USERNAME', 'forge'),
  'password' => env('DB_PASSWORD', ''),
  'charset' => 'utf8',
  'collation' => 'utf8_unicode_ci',
  'prefix' => '',
  'strict' => false,
  'engine' => null,
],

그 중에서 모두 env 파일 의 기본 값 을 도입 합 니 다.laravel 디 렉 터 리 의 가장 바깥쪽 에는.env 파일 이 있 고 그 중에서 해당 하 는 기본 값 을 설정 합 니 다.
DB_HOST=데이터베이스 서버 주소
DB_PORT=데이터베이스 포트
DB_DATABASE=데이터베이스 이름
DB_사용자 이름
DB_PASSWORD=비밀번호
2.원생 SQL 조작 데이터베이스
controller 에서 데이터 베 이 스 를 추가 삭제 하고 검사 하 는 작업

public static function testDB(){
  //      
  DB::insert("insert into student(name,age) values(?,?)",['sandy',19]);
  //      
  DB::delete('delete from student where name=?',['sandy']);
  //      
  DB::update('update student set sex=? where name=?',[' ','tory']);
  //    
  $res=DB::select('select * from student');
  //         
  DB::statement('drop table users');
  //    
  dd($res);
}

그 중 통과?자리 표시 자 방식 으로 매개 변 수 를 바 인 딩 하여 데이터 베 이 스 를 공격 하 는 것 을 방지 하고 이름 을 바 인 딩 하 는 방식 도 사용 할 수 있 습 니 다.   

$res = DB::select('select * from users where id = :id', ['id' => 1]);

3.조회 구축 기 를 통 해 데이터 베 이 스 를 조작 합 니 다.
Laravel 은 자주 사용 하 는 데이터 베 이 스 를 인터페이스 함수 로 밀봉 하여 사용자 에 게 호출 을 제공 하여 데이터 베 이 스 를 더욱 편리 하 게 합 니 다.이 인 터 페 이 스 는 검색 구축 기(query builder)입 니 다.또한 PDO 바 인 딩 방식 을 통 해 SQL 주입 공격 을 피하 고 조회 구축 기 를 사용 할 때 사용자 의 입력 을 걸 러 내 는 것 을 고려 하지 않 아 도 됩 니 다.
3.1 결과 집
lavarel 조회 의 반환 결과 집합 은 Stdclass 입 니 다.$res->name 와 유사 한 방문 대상 속성 으로 반환 값 에 접근 할 수 있 습 니 다.전체 표를 조회 하려 면 get()을 사용 하고,조회 표 의 한 데 이 터 는 first()를 사용 하 며,한 데이터 의 한 필드 는 value()를 사용 하고,조회 표 의 모든 데이터 의 한 필드 는 pluck()를 사용 합 니 다.

//get()        
$res=DB::table('student')->get();
//first()            
$res=DB::table('student')->where('id','1001')->first();
//value()            
$res=DB::table('student')->where('id','1003')->value('name');
//pluck()      name      
$res=DB::table('student')->pluck('name');

결과 가 집 중 된 데이터 가 너무 많 을 때 블록 을 나 누 는 방식 으로 결과 집합 을 되 돌 릴 수 있 습 니 다.chunk 함수 의 첫 번 째 매개 변 수 는 블록 의 크기(블록 당 2 개의 데이터 로 결과 집합 을 되 돌려 줍 니 다)이 고 두 번 째 매개 변 수 는 반전 함수 입 니 다.false 로 돌아 갈 때 결과 집합 을 되 돌려 줍 니 다.

DB::table('student')->chunk(2,function ($res){
  foreach ($res as $user){
    var_dump($user);
    if ($user->id >=1003) return false;
  }
});

3.2 첨삭 검사

//      
DB::table('student')->insert(['name'=>' four','sex'=>' ','age'=>22]);
//      
DB::table('student')->insert([
  ['name'=>'wang ','sex'=>' ','age'=>21],
  ['name'=>'zhao ','sex'=>' ','age'=>20],
]);
//    
DB::table('student')->where('id','>=',1006)->delete();
//     
DB::table('student')->truncate();
//    
DB::table('student')->where('id',1005)->update(['sex'=>' ','age'=>21]);
//  increment、  decrement,   1
DB::table('student')->where('id',1005)->increment('age',2);
//          
DB::table('student')->where('id',1005)->increment('age',1,['sex'=>' ']);
//      
$res=DB::table('student')->select('name','age')->get();

3.3 조회 조건
구축 기 를 조회 하 는 where 방법 을 통 해 데이터베이스 조회 조건 을 추가 할 수 있 습 니 다.where()세 개의 인 자 를 받 을 수 있 습 니 다.필드 이름,연산 자,값,연산 자 는'='이면 생략 할 수 있 습 니 다.예 를 들 어 id>=1003 의 데 이 터 를 조회 할 수 있 습 니 다.

$res=DB::table('student')->where('id','>=',1003)->get();

또한 조건 배열 을 통 해 여러 개의 제한 조건 을 전송 할 수 있 습 니 다.예 를 들 어 조회 id>=1003 및 id<1005:

$res=DB::table('student')->where([
  ['id','>=',1003],
  ['id','<',1005]
])->get();

orwhere()를 통 해 두 개의 병렬 조건 을 연결 합 니 다.예 를 들 어 id>=1003 또는 id<1002 의 데 이 터 를 조회 합 니 다.

$res=DB::table('student')->where('id','>=',1003)->orwhere('id','<',1002)->get();

whereBetween()특정한 구간 에 있 는 데 이 터 를 조회 합 니 다.

$res=DB::table('student')->whereBetween('id',[1003,1006])->get();

when()어떤 조회 가 실 행 될 지 여 부 를 판단 합 니 다.예 를 들 어$order 가 true 일 때 정렬 을 실행 합 니 다.

$order=false;
$res=DB::table('student')->when($order,function ($query){
  return $query->orderBy('age','desc');       //$order true       
})->get();

3.4 정렬,그룹,한정

//orderBy age    
$res=DB::table('student')->orderBy('age','asc')->get();
//  create_at        
$res=DB::table('student')->latest('create_at')->get();
//  
$res=DB::table('student')->groupBy('sex')->get();
//         2   
$res=DB::table('student')->skip(1)->limit(2)->get();

3.5.집합 함수
laravel 조회 구축 기 는 집합 함수 가 조회 작업 에 사용 되 는 결과 집합 도 제공 합 니 다.count(계수),sum(구 화),avg(평균 값),max(최대 값),min(최소 값)을 포함 합 니 다.예 를 들 어 연령 평균 값 을 구 합 니 다.

$res=DB::table('student')->avg('age');

4、Eloquent ORM
ORM 은 대상 관계 매 핑(Object Relational Mapping)의 약칭 으로 대상 을 대상 으로 하 는 프로 그래 밍 언어 에서 서로 다른 유형의 시스템 의 데이터 간 의 전환 을 실현 하 는 기술 로 데이터베이스 에 있 는 데 이 터 를 대상 의 형식 에 따라 조직 하여 대상 을 대상 으로 하 는 프로그램 이 데이터 베 이 스 를 조작 하 는 데 편리 하도록 할 것 이다.이전에 mongoDB 를 공부 할 때 사용 한 적 이 있다mongoose ORM 조직 mongoDB.당시 에는 아직 이것 이 orm 이라는 것 을 의식 하지 못 했다.
Laravel 에 내 장 된 Eloquent ORM 은 데이터베이스 데 이 터 를 조직 하 는 데 편리 한 방법 을 제공 합 니 다.모든 데이터 시트 는 이 표 와 상호작용 을 하 는 모델(Model)에 대응 합 니 다.Model 류 를 통 해 데이터 시트 를 조회,삽입,업데이트,삭제 할 수 있 습 니 다.Eloquent ORM 은 본질 적 으로 조회 구축 기 이기 때문에 위 에서 조회 구축 기 가 사용 하 는 방법 Eloquent 를 모두 사용 할 수 있 습 니 다.
4.1 모델 생 성
app 폴 더 에 model 파일 을 새로 만 들 려 면 모든 데이터 베 이 스 는 model 에 대응 해 야 합 니 다.예 를 들 어 Student 템 플 릿 류 를 만 드 는 것 입 니 다.

namespace App;
use Illuminate\Database\Eloquent\Model;
class Student extends Model
{
  //      
  protected $table='student';
  //    
  protected $primaryKey='id';
  //         
  protected $fillable=['name','age'];
  //          
  protected $guarded=['created_at'];
}

템 플 릿 클래스 는 기본적으로 소문 자 끝 에 s 를 추가 하 는 데이터 베 이 스 를 사용 합 니 다.예 를 들 어 Student 템 플 릿 은 현재 데이터베이스 에서 students 표를 찾 습 니 다.사용자 정의 테이블 이름 이 필요 하 다 면,테이블 이름 을 지정 하기 위해$table 변 수 를 다시 써 야 합 니 다.
Eloquent 의 기본 키 는'id'이 고 이 필드 는 자체 증가 int 형 입 니 다.사용자 정의 키 가 필요 하 다 면$primary Key 를 통 해 지정 할 수 있 습 니 다.
Eloquent 는 기본적으로 데이터 시트 의 생 성 시간,업데이트 시간 을 관리 합 니 다.데이터 시트 의 created 에 대응 합 니 다.at、updated_at 필드,테이블 을 만 들 때 이 두 필드 를 포함해 야 합 니 다.관리 가 필요 하지 않 으 면 Public$timestamps=false;를 사용 할 수 있 습 니 다.그렇지 않 으 면 잘못 보고 할 것 이다.
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'updated_at' in 'field list'
데이터베이스 에 있 는 필드 를 두 시간 동안 사용자 정의 할 수도 있 습 니 다.

const CREATED_AT = 'my_create';
const UPDATED_AT = 'my_update';

4.2,Eloquent 작업 데이터베이스
  • 새로 추 가 된 데 이 터 는 두 가지 방법 이 있 는데 하 나 는 새로 만 든 ORM 인 스 턴 스 를 통 해 만 드 는 방법 이다.create 를 사용 하여 대량으로 추가 할 때 템 플 릿 에서$fillable 을 통 해 값 을 부여 할 수 있 는 필드 를 지정 해 야 합 니 다.$guard 는 값 을 부여 할 수 없 는 필드 를 지정 할 수도 있 습 니 다.
  • 
    //       、  
    $stu=new Student();
    $stu->name='orm2';
    $stu->save();
    //create        
    Student::create(['name'=>'orm3','age'=>13]);
    
    
  • 데 이 터 를 삭제 하 는 데 도 두 가지 방법 이 있다.하 나 는 find 방법 으로 지정 한 메 인 키 를 삭제 하 는 것 이 고,다른 하 나 는 검색 을 통 해 구축 기 를 삭제 하 는 것 이다.
  • 
    //destroy       
    Student::destroy(1006,1007);
    //         
    Student::where('id',1008)->delete();
    
    
  • 수정 데이터:① ORM 인 스 턴 스 를 통 해 수정 하고 저장 ② 구축 기 조회
  • 
    //    Student      
    $stu=Student::find(1005);
    $stu->age=21;
    $stu->save();
    //         
    Student::where('id',1005)->update(['age'=>22]);
    
    
  • 데이터 찾기:
  • 
    //        
    $table=Student::all();
    //  id      
    $row=Student::find(1002);
    dd($table);
    
    
    물론 빌 더 의 get(),first()를 통 해 데 이 터 를 얻 을 수 있 습 니 다.
    위의 첨삭 개 조 를 통 해 Eloquent 는 검색 빌 더 의 모든 방법 을 사용 할 수 있 음 을 알 수 있 습 니 다.첨삭 개 조 를 제외 하고 where,취 합 함수 등 도 있 습 니 다.
    더 많은 Laravel 관련 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있다.,,,,,Laravel 프레임 워 크 입문 및 진급 튜 토리 얼
    본 고 는 Laravel 프레임 워 크 를 바탕 으로 하 는 PHP 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.

    좋은 웹페이지 즐겨찾기