- 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 |