라라벨 DB 빌더

Code/PHP 2018. 11. 16. 16:36

- Laravel Database Builder



- 데이터베이스 생성

사용자 User 

프로파일 Profile = 1:1 관계

주문 Order = 1:다 관계

역할 Role = 다:다 관계

(상품 Product = 다:다 관계)


- 모델 생성

php artisan make:model Models/User

php artisan make:model Models/Profile

php artisam make:model Models/Order

php artisan make:model Models/Role



- 관계 설정

//사용자

class User extends Model

{

    //프로파일 과 1:1 관계

public function profile()

{

        return $this->hasOne( '\App\Models\Profile' );

        //return $this->hasOne(Profile::class);

    }

    

    //1:다

    public function orders()

    {

        return $this->hasMany( 'App\Models\Order');

    }


    //다:다

    public function roles()

    {

        return $this->belongsToMany('\App\Models\Role');

    }

}


// 프로파일 Profile = 1:1 관계

return $this->belongTo('App\User');


// 주문 Order = 1:다 관계

return $this->belongsTo( '\App\User');


// 역할 Role = 다:다 관계

return $this->belongsToMany('App\User');




//================

- 콘트롤러 만들기

php artisan make:controller Test/ProfileController -r


web.php에 추가

Rount::resource('profile', 'Test\ProfileController');




//===============================

- 쿼리 빌더 (DB Query Builder )

https://laravel.kr/docs/5.5/database

- Collection 도 함께

- get(), all(), distinct(), pluck('name')->all(); toSql()


- Raw 쿼리 

$ques = DB::select('select * from profiles where id >= ?', [1]);//Array (stdClass Object)리턴      

Array ( [0] => stdClass Object ( [id] => 1

- 값 처리

foreach ($ques as $que) {

    echo $ques->id;

}


- 쿼리 빌더

$builder1 = DB::table('profiles')->where('id', '<=',2);//Builder 리턴

Builder {#330 ▼

  +connection: MySqlConnection {#226 ▶}

  +grammar: MySqlGrammar {#227 ▶}



- 쿼리 문자열

dump($builder1->toSql().$builder1->getBindings()[0]);

select * from profiles where id <= ? 

- ? 내용 = $ques->getBindings()



dump($builder1->first());//첫 레코드 (클래스 형식 리턴)

dump($builder1->value('title'));//값 리턴

dump($builder1->get()->all());// get() = get()->all() , 컬렉션 리턴


dump($ques->pluck('title'));//title 배열

dump($ques->pluck('title', 'id'));//뒤에 있는 id가 key가 됨

foreach ($ques as $id => $title) {

    echo $title;

}



//==========

* select

$users = DB::table('users')->select('name', 'email as user_email')->get();


->select(DB::raw('count(*) as user_count, status'))



//================

* Joins-조인

Inner 조인 = 교집합

        $ques = DB::table('profiles as q')->select('p.title as pt', 'q.title as qt')

            ->join('pass as p', 'p.id', '=', 'q.pass_id')->get();

        foreach($ques as $que){

            apPrint($que->pt);

        }

- select 에서 AS 를 설정 하지 않으면, 

칼럼이 같은 경우, 대상이 되는 (외래키를 가진) 테이블 내용이 우선 나온다.



//==============

* when - 조건적 where 절


$users = DB::table('users')

                ->when($sortBy, function ($query) use ($sortBy) { //$sortBy 값이 있으면

                    return $query->orderBy($sortBy);

                }, function ($query) {//$sortBy 값이 없으면

                    return $query->orderBy('name');

                })

                ->get();



//=======================================

* 칼럼의 모든 값을 감소, 증가 시키기

DB::table('tests')->increment('num1');



//=========================================

* 페이지 네이션


//*controller.php

  $ques = DB::table('profiles')->paginate(3);

      return view('profiles.index')->with('ques',$ques);   


//================

//*.blade.php


<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="utf-8">

    <link rel="stylesheet" ref="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">

</head>

<body>

<div class="container">

    @foreach($ques as $que)

        {{ $que->title }}<br>

    @endforeach

</div>

{{ $ques->links() }}



반응형

'Code > PHP' 카테고리의 다른 글

[라라벨] 사용 팁 모음  (0) 2019.01.15
[라라벨] 로그인 유지 구현 방식  (0) 2019.01.15
라라벨 컬렉션  (0) 2018.11.16
[W3Schools] PHP 정리  (0) 2018.11.09
[라라벨] POST 예제  (0) 2018.10.14
Posted by codens