8강 - 날 쿼리 :(

사용할 테이블을 만들자

3강 - 글로벌 설정 살펴보기에서 .env 파일에 설정한 내용으로 posts 테이블을 만들어 보자.

주의

홈스테드 환경 사용자는 데이터베이스 관련 모든 명령을, 호스트 컴퓨터의 쉘이 아니라 홈스테드 쉘에서 수행해야 한다. 뒤에 나올 마이그레이션 등도 마찬가지로 홈스테스 쉘에서 수행해야 한다.

# 아래 명령들은 이런 내용으로 만든다는 내용을 보여주기 위한 것이며 실제로는 GUI 툴로 해도 무방하다.

$ mysql -uroot
mysql > CREATE DATABASE myProject;
mysql > CREATE USER 'homestead' IDENTIFIED BY 'secret';
mysql > GRANT ALTER, CREATE, INSERT, SELECT, DELETE, REFERENCES, UPDATE, DROP, EXECUTE, LOCK TABLES, INDEX ON myProject.* TO 'homestead';
mysql > FLUSH PRIVILEGES;
mysql > exit (enter)

$ mysql -uhomestead -p
mysql > CREATE TABLE posts(
    -> id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> title VARCHAR(255),
    -> body TEXT
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
mysql > INSERT INTO posts(title, body) VALUES('My Title', 'My Body');
mysql > exit (enter)

mySql에 root로 로그인하여 myProject DB를 만들고, homestead 사용자에 대해 myProject DB에 대한 접근 권한 부여를 반드시 해야 한다. 아래 그림은 Sequel Pro 에서 권한 부여Cmd + U하는 과정이다.

라라벨을 이용해서 DB 쿼리를 해 보자.

참고 실제로 이렇게 사용하는 경우는 거의 없으니 참고만 하자.

쿼리를 배우기 위해 라라벨에서 제공하는 REPL 을 이용하자. tinker('어설프게 손보고 고치다' 라는 뜻)라고 불리는 artisan 코맨드인데, 라라벨의 모든 환경이 제공되기 때문에 여러가지 실험적인 시도들을 해보기 편리하다.

$ php artisan tinker
Psy Shell v0.5.2 (PHP 5.6.7 — cli) by Justin Hileman
>>> (cursor)

posts 테이블을 가져와 보자.

>>> DB::select('select * from posts');
=> [
     {#676
       +"id": 1,
       +"title": "My Title",
       +"body": "My Body",
     },
   ]

레코드를 더 추가하자. 라라벨은 PDO를 이용하기 때문에 ? 처럼 같이 데이터를 바인딩해 줘야 한다.

>>> DB::insert('insert into posts(title, body) values(?, ?)', ['Second Title', 'Second Body']);
=> true

Collection이 아니라 하나의 Instance만 얻으려면 어떻게 해야 할까?

>>> $post = DB::selectOne('select * from posts where id = ?', [1]);
=> {#689
     +"id": 1,
     +"title": "My Title",
     +"body": "My Body",
   }
>>> $post->title;
=> "My Title"

업데이트도 해 보자.

>>> DB::update('update posts set title="Modified Title" where id = ?', [2]);
=> 1



comments powered by Disqus
목록 토글
keyboard_arrow_up