[KOHANA] Bài 5 tìm hiểu về làm việc cơ sở dữ liệu

Bạn vào application/bootstrap.php tìm Kohana::modules thay thế thành

PHP Code:
Kohana::modules(array(
        
// 'auth'       => MODPATH.'auth',       // Basic authentication
        // 'cache'      => MODPATH.'cache',      // Caching with multiple backends
        // 'codebench'  => MODPATH.'codebench',  // Benchmarking tool
         
'database'   => MODPATH.'database',   // Database access
        // 'image'      => MODPATH.'image',      // Image manipulation
        // 'orm'        => MODPATH.'orm',        // Object Relationship Mapping
        // 'unittest'   => MODPATH.'unittest',   // Unit testing
        // 'userguide'  => MODPATH.'userguide',  // User guide and API documentation
));  

Và sau đó bạn vào thư mục modules/database/config/ copy fle database.php vào thư mụcapplication/config và mở file database.php đó lên ta thay thế bằng

PHP Code:
<?php

defined

('SYSPATH') or die('No direct access allowed.');

return array
    (
    

'default' => array
        (
        
'type' => 'mysql',
        
'connection' => array(
            
/**
             * The following options are available for MySQL:
             *
             * string   hostname     server hostname, or socket
             * string   database     database name
             * string   username     database username
             * string   password     database password
             * boolean  persistent   use persistent connections?
             * array    variables    system variables as "key => value" pairs
             *
             * Ports and sockets may be appended to the hostname.
             */
            
'hostname' => 'localhost',
            
'database' => 'k_db',
            
'username' => 'root',
            
'password' => 'root',
            
'persistent' => FALSE,
        ),
        
'table_prefix' => '',
        
'charset' => 'utf8',
        
'caching' => FALSE,
        
'profiling' => TRUE,
    ),
    
'alternate' => array(
        
'type' => 'pdo',
        
'connection' => array(
            
/**
             * The following options are available for PDO:
             *
             * string   dsn         Data Source Name
             * string   username    database username
             * string   password    database password
             * boolean  persistent  use persistent connections?
             */
            
'dsn' => 'mysql:host=localhost;dbname=kohana',
            
'username' => 'root',
            
'password' => 'r00tdb',
            
'persistent' => FALSE,
        ),
        
/**
         * The following extra options are available for PDO:
         *
         * string   identifier  set the escaping identifier
         */
        
'table_prefix' => '',
        
'charset' => 'utf8',
        
'caching' => FALSE,
        
'profiling' => TRUE,
    ),
);

Và các bạn chay query sql sau:

PHP Code:
CREATE DATABASE /*!32312 IF NOT EXISTS*/`k_db/*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_bin */;

USE `

k_db`;

/*Table structure for table `book` */

DROP TABLE IF EXISTS `book`;

CREATE TABLE `book` (
  `
book_idINT(11UNSIGNED NOT NULL AUTO_INCREMENT,
  `
book_nameVARCHAR(255COLLATE utf8_bin DEFAULT NULL,
  `
book_descriptionTEXT COLLATE utf8_bin,
  `
book_priceDOUBLE DEFAULT NULL,
  `
member_id_postINT(11) DEFAULT NULL,
  
PRIMARY KEY  (`book_id`)
ENGINE=INNODB AUTO_INCREMENT=DEFAULT CHARSET=utf8 COLLATE=utf8_bin CHECKSUM=1 DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC;

/*Data for the table `book` */

LOCK TABLES `bookWRITE;

INSERT  INTO `book`(`book_id`,`book_name`,`book_description`,`book_price`,`member_id_post`) VALUES (1,'Book 1','description book 1',1.2,1),(2,'Book 2','description book 2',1.99,2),(3,'Book 3 ','description book 3',0.99,1),(4,'Book 4','description book 4',0.49,3);

UNLOCK TABLES;

/*Table structure for table `member` */

DROP TABLE IF EXISTS `member`;

CREATE TABLE `member` (
  `
member_idINT(11UNSIGNED NOT NULL AUTO_INCREMENT,
  `
member_nameVARCHAR(255COLLATE utf8_bin DEFAULT NULL,
  
PRIMARY KEY  (`member_id`)
ENGINE=MYISAM AUTO_INCREMENT=DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

/*Data for the table `member` */

LOCK TABLES `memberWRITE;

INSERT  INTO `member`(`member_id`,`member_name`) VALUES (1,'Kenny'),(2,'Mr.Storm'),(3,'Member');

UNLOCK TABLES;  

Và các bạn tạo 1 controller book với nội dung như sau đối với bạn chưa biết thì có thế đọc tại đây Controller:

PHP Code:
<?php

defined

('SYSPATH') or die('No direct script access.');

class 

Controller_Book extends Controller {

    public function 

action_index() {
        
$this->response->body('Book index');
    }
    
    public function 
action_detail() {
        
$id $this->request->param('id');
        
$this->response->body('Your request Book ID:' $id);
    }

}

// End Book

Ta chạy thử 2 link xem được ko?
http://localhost/kohana/book
http://localhost/kohana/book/detail/1

Select
Okie.... ta bắt đầu thao tác database
Để select 1 bảng trong database thì ta làm như sau

PHP Code:
DB::select()->from(table);  

Giờ ta thử select bảng book ra xem nào ^^!, các bạn thay thế action index thành như sau

PHP Code:
public function action_index() {
        
$query DB::select()->from('book')->execute()->as_array(NULL);
        echo 
'<pre>';
        
print_r($query);
        echo 
'</pre>';
    }  

Và chạy thử link này xem nào -> http://localhost/kohana/book -> ra như vầy okie

 

Array
(
[0] => Array
(
[book_id] => 1
[book_name] => Book 1
[book_description] => description book 1
[book_price] => 1.2
[member_id_post] => 1
)

[1] => Array
(
[book_id] => 2
[book_name] => Book 2
[book_description] => description book 2
[book_price] => 1.99
[member_id_post] => 2
)
....

)

Ta nhìn vào member_id_post thì ta chẳng biết nó là cái quái gì cả... bây giờ ta join 2 table book và member lại xem sao nhá... các bạn sửa action index lại 1 tí nào

PHP Code:
public function action_index() {
        
$query DB::select()
                ->
from('book')
                ->
join('member','left')->on('member.member_id''=''book.member_id_post')
                ->
execute()->as_array(NULL);
        echo 
'<pre>';
        
print_r($query);
        echo 
'</pre>';
    }  

Và chạy thử link này xem nào -> http://localhost/kohana/book -> lúc này ta có thêm member_name ^^!, bít ai post rồi chứ gì.

PHP Code:
->join('member','left')->on('member.member_id''=''book.member_id_post')  

Dùng join left và dựa trên 2 khóa member_id của table member bằng với member_id_post của table book

Bây giờ ta select đúng book id của nó lun nào... ^^! Nãy giờ ta lấy toàn bộ book, giờ ta lấy 1 book dựa theo id của nó nào. Sửa action detail lại thành

PHP Code:
public function action_detail() {
        
$id $this->request->param('id');
        
$query DB::select()
                    ->
from('book')
                    ->
join('member''left')->on('member.member_id''=''book.member_id_post')
                    ->
where('book.book_id''='$id)
                    ->
execute()->as_array(NULL);
        echo 
'<pre>';
        
print_r($query);
        echo 
'</pre>';
    }  

Chạy thử link -> http://localhost/kohana/book/detail/1 -> xem nó có ra đúng như ý bạn muốn ko nào

Insert
Giờ ta thêm data và bảng book nào

PHP Code:
public function action_add() {
        
$col = array(
            
'book_name',
            
'book_description',
            
'book_price',
            
'member_id_post'
        
);
        
        
$values = array(
            
'book add',
            
'book description add',
            
'1.59',
            
'2'
        
);
        
$id DB::insert('book'$col)->values($values)->execute();
        echo 
'<pre>';
        
print_r($id);
        echo 
'</pre>';
    }  

Chạy thử link -> http://localhost/kohana/book/add -> nếu xuất ra được vầy là okie

 

Array
(
[0] => 6 // id book ne
[1] => 1 // so record insert vao
)

Update nào ^^!

PHP Code:
public function action_update() {
        
$id $this->request->param('id');
        
        
$set = array(
            
'book_name' => rand(510),
            
'book_description' => rand(1020),
        );
        
        
$query DB::update('book')->set($set)->where('book_id''='$id)->execute();
        echo 
'<pre>';
        
print_r($query);
        echo 
'</pre>';
    }  

Chạy link nào -> http://localhost/kohana/book/update/1 -> xuất hiện số 1 la okie ^^
ở đây mình cho update name và description

Delete nào

PHP Code:
public function action_delete() {
        
$id $this->request->param('id');
        
        
$query DB::delete('book')->where('book_id''='$id)->execute();
        
        echo 
'<pre>';
        
print_r($query);
        echo 
'</pre>';
    }  

Chạy link nào -> http://localhost/kohana/book/update/1 -> xuất hiện số 1 la okie ^^

Vậy là xog database ... bài sau mình sẽ viết thành model và chỉ cho các bạn

Giờ bạn thử kết hợp bài này và bài Controller + Template + View - Kohana lại thử xem.

Cho nó có 1 tí giao diện nhìn thân thiện hơn ^^!

Chúc các bạn thành công.

tham khảo http://www.qhonline.info/forum/showthread.php/4638-database-kohana?s=d00bbadd29614cbbaa02fe94b0c69eb4