// Get all record from archives table by IdUserCreate public function getAllByUserId($id) { $conn = Yii::app()->db; $conn->active = true; // Start connect $command = $conn->createCommand(); $rows = $command->select('*') ->from('archives') ->where('IdUserCreate=:id', array(':id'=>$id)) ->query(); $result = $rows->readAll(); $conn->active = false; // Close connect return $result; }
Search
Oct 12, 2015
Yii: Get all record by id - Cdbcommand Yii
Oct 5, 2015
Kiến thức tổng quan Yii Framwork
======== MODEL ========
+ Nên chứa các thuộc tính đại diện cho các dữ liệu cụ thể.
+ Nên chứa các business logic nhằm đảm bảo các dữ liệu đáp ứng được yêu cầu thiết kế
+ Có thể chứa các mã thao tác với database
+ Tránh sử dụng $_GET, $_POST hoặc các biến trực tiếp gắn liến với request của người dùng
+ Tránh nhúng các mã HTML hoặc các mã trình diễn khác (echo, …)
+ Model là 1 đối tượng của lớp CModel hoặc một class kế thừa CModel
+ Model dùng để giữ dữ liệu và những luật kinh doanh, thường là đại diện cho 1 row trong bảng table của database hoặc là 1 form input.
+ 1 Model tượng trưng cho 1 đối tượng dữ liệu độc lập
+ Yii implement 2 loại model: Form Model và Active Record. Cả 2 đều kế thừa từ CModel
+ Form Model là đối tượng của CFormModel. Form Model sử dụng để lưu trữ dữ liệu được thu thập từ form bởi user.
+ Active Record (AR) là kiểu design pattern sử dụng database trừu tượng để truy cập vào 1 kiểu hướng đối tượng. Đối tượng AR là đối tượng của CActiveRecord hoặc của một class con của class này, tượng trưng cho một hàng trong 1 bảng của database. Mỗi field trong hàng này tượng trưng cho thuộc tính của AR.
+ Khai báo những thuộc tính trong Model, ta khai báo những biến đó trong class atributeLabel() và nếu ta muốn save chúng thì ta viết trong hàm afterSave. Ví dụ ta khai báo biến create_time thì ta code: $this->create_time = Tỉme();
+ Một vài phương thức liên quan đến truy vấn CSDL:
# Protected Methods + # Events: beforSave() / afterSave(), beforeDelete() / afterDelete(), beforeValidate() / afterValidate(), beforFind() / afterFind().
======== # MODEL =======
======== VIEW ========-
+ Nên Chứa các mã trình diễn, như HTML, PHP, ASP, đơn giản để thể định dạng dữ liệu
+ Có thể truy cập các thuộc tính (property) và phương thức (method
controller và model nhưng chỉ với mục đích trình bày.
+ Tránh chứa các mã truy vấn dữ liệu
+ Tránh truy cập trực tiếp đến $_GET, $_POST, hoặc các biến tương tự khác đại diện cho request của người dùng.
+ Trong view ta có thể sử dụng $this để đại diện cho đối tượng controller
+ Get thuộc tính trong view $this->properties.
+ Chúng ta có thể render thuộc tính như sau trong controller:
$this->render(’edit’, array(
’var1’=>$value1,
’var2’=>$value2,
)
+ Trong view ta sẽ gọi $var1 và $var2
+ Trong view ta gọi widget CListView
widget('zii.widgets.CListView', array(
'dataProvider'=>$dataProvider, // đưa mảng dữ liệu vào
'itemView'=>' _view, // file _view.php trong views folder
'template'=>"{items}\n{pager}",
)); ?>
+ Các phương thức khi làm việc với view
- render() : render a view with layout
- renderDynamic() : render nội dung động được trả về từ 1 callback xác định.
- renderFile() renderInternal(): render một file view.
- renderPartial() : render một view.
- renderText() : render một static text.
- beforRender() + afterRender()
======== # VIEW ========
======== # CONTROLLER ========
+ Có thể truy cập $_GET, $_POST và các biến tương tự khác đại diện cho request của người dùng.
+ Có thể tạo ra các thực thể (instance) của model.
+ Tránh code các câu lệnh truy vấn SQL hoặc code bất kỳ mã HTML hoặc các ngôn ngữ trình diễn khác.
======== # CONTROLLER ========
======== LAYOUT ========
+ Render 1 view không sử dụng bất cứ layout nào ta dùng renderPartial().
WIDGET
+ Widget là 1 đối tượng của lớp CWidget hoặc lớp con của lớp CWidget
+ Cách gọi Widget
beginWidget(’path.to.WidgetClass’); ?>
...body content that may be captured by the widget..
endWidget(); ?>
or
widget(’path.to.WidgetClass’); ?>
+ $this trong view của widget cũng được sử dụng để đại diện cho controller
======== # LAYOUT ========
======== COMPONENTS ========
+ Yii được xây dựng trên các component. Sử dụng các Component chủ yếu liên quan đến việc truy cập các thuộc tính của nó và nâng cao xử lí sự kiện. Component là đối tượng quản lí Event và Behavior.
+ Có 2 cách để khai báo properties Component.
C1: mô tả biến public trong class kế thừa CComponent
class Document extends CComponent { public $textWidth; }
C2: dùng hàm get, set để khai báo
COMPONENTS EVENT
+ Các method được gán trong một sự kiện sẽ được tự động thực thi mỗi khi sự kiện được
gọi (raise)
+ Component event là 1 biến đặc biệt mà nó lấy 1 phương thức như là giá trị của chúng.
+ Khi event được gọi thì hàm tự động cũng được gọi.
+ Để khai báo một sự kiện trong component, ta phải khao báo một method bắt đầu bằng on ví dụ onClick()
COMPONENTS BEHAVIOR
+ 1 component có thể hỗ trợ kiểu mixin và nó có thể được cố định với 1 hoặc 1 vài hành vi.
+ 1 hành vi là 1 đối tượng mà các mehods của nó có thể kế thừa bởi chính component gộp của chính hành vi đó, điều đó có nghĩa là nó thu thập chức năng thay thế cho việc chuyên môn hóa.
+ 1 component có thể được gán 1 vài hành vi (behavior), vì thế nó có thể đạt được tính đa kế thừa.
+ Những class behavior phải được implement từ interface IBehavior.
+ Để sử dụng 1 behavior, trước tiên nó phải được gán vào một component qua phươnng thức $component->attachBehavior($name, $behavior) sau đó ta có thể sử dụng phương thức của behavior thông qua component $component->methodBehavior()
======== # COMPONENTS ========
======== Data Access Object (DAO) ========
DAO cung cấp một API chung để truy cập dữ liệu được lưu trữ trong hệ thống quản lý CSDL khác nhau.
Yii DAO chủ yếu bao gồm 4 lớp (class) sau:
1. CDbConnection: đại diện cho một kết nối đến CSDL
2. CDbCommand: đại diện cho một câu lệnh truy vấn SQL để thực hiện trên CSDL
3. CDbDataReader: đại diện cho một tập hợp các hàng (row) từ kết quả câu truy vấn
4. CdbTransaction: đại diện cho một giao dịch (transaction) với DB.
Thiết lập kết nối DB, ta tạo CdbConnection object như sau:
$conn = new CDbConnection($dsn, $username, $password);
$conn->active = true; // Start connect
// Get data ....
$conn->active = false; // Close connect
Danh sách các $dns cho mỗi database
+ SQLite = sqlite:/path/to/dbfile
+ MySQL = mysql:host=localhost;dbname=dbname;
+ PostgreSQL: pgsql:host=localhost;port=5432;dbname=testdb
+ SQL Server: mssql:host=localhost;dbname=testdb
+ Oracle: oci:dbname=//localhost:1521/testdb
Nếu ta cấu hình DB trong file config/main thì ta truy cập DB connection như sau
$conn = Yii::app()->db;
Khi kết nối thành công các, ta sử dụng CDbCommand để truy vấn SQL.
Ta dùng CDbConnection::createCommand()
$command = CDbConnection::createCommand();
$rowCount=$command->execute(); // execute the non-query SQL
$dataReader=$command->query(); // execute a query SQL
$rows=$command->queryAll(); // query and return all rows of result
$row=$command->queryRow(); // query and return the first row of result
$column=$command->queryColumn(); // query and return the first column of result
$value=$command->queryScalar(); // query and return the first field in the first row
Một câu lệnh CdbCommand được thực thi = 1 trong 2 cách sau:
execute(): thực hiện non-query SQL, như INSERT, UPDATE và DELETE
query(): thực hiện câu truy vấn trả về tập hợp các hàng (row) dữ liệu, như SELECT
Lấy data ta sử dụng CdbDataReader()->read()
$dataReader=$command->query();
// calling read() repeatedly until it returns false
while(($row=$dataReader->read())!==false) { ... }
// using foreach to traverse through every row of data
foreach($dataReader as $row) { ... }
// retrieving all rows at once in a single array
$rows=$dataReader->readAll();
Using Transactions (Sử dụng transaction)
Để sử dụng transaction (giao dịch) ta sử dụng cấu trúc như sau:
$transaction=$connection->beginTransaction();
try {
$connection->createCommand($sql1)->execute();
$connection->createCommand($sql2)->execute();
//.... other SQL executions
$transaction->commit();
} catch(Exception $e) {
// an exception is raised if a query fails
$transaction->rollBack();
}
Truyền tham số vào câu truy vấn SQL
// http://www.php.net/manual/en/pdostatement.bindparam.php
// an SQL with two placeholders ":username" and ":email"
$sql="INSERT INTO tbl_user (username, email) VALUES(:username,:email)";
$command=$connection->createCommand($sql);
// replace the placeholder ":username" with the actual username value
$command->bindParam(":username",$username,PDO::PARAM_STR);
// replace the placeholder ":email" with the actual email value
$command->bindParam(":email",$email,PDO::PARAM_STR);
$command->execute();
// insert another row with a new set of parameters
$command->bindParam(":username",$username2,PDO::PARAM_STR);
$command->bindParam(":email",$email2,PDO::PARAM_STR);
$command->execute()
QUERY BUILDER
+ Yii Query Builder cung cấp việc viết các câu lệnh SQL theo hướng đối tượng. Nó cho
phép sử dụng các phương thức và thuộc tính để chia nhỏ câu lệnh SQL thành các phần
đơn giản hơn. Các phần đó sau đó được Yii kết hợp lại và thực thi thông qua DAO.
$user = Yii::app()->db->createCommand()
->select('id, username, profile')
->from('tbl_user u')
->join('tbl_profile p', 'u.id=p.user_id')
->where('id=:id', array(':id'=>$id))
->queryRow();
+ Các phương thức liên quan đến Query Builder
select(): specifies the SELECT part of the query
selectDistinct(): specifies the SELECT part of the query and turns on the DISTINCT flag
from(): specifies the FROM part of the query
where(): specifies the WHERE part of the query
join(): appends an inner join query fragment
group(): specifies the GROUP BY part of the query
having(): specifies the HAVING part of the query
order(): specifies the ORDER BY part of the query
limit(): specifies the LIMIT part of the query
offset(): specifies the OFFSET part of the query
union(): appends a UNION query fragment
$users = Yii::app()->db->createCommand()
->select('*')
->from('tbl_user')
->queryAll();
$user = Yii::app()->db->createCommand()
->select('id, username, profile')
->from('tbl_user u')
->join('tbl_profile p', 'u.id=p.user_id')
->where('id=:id', array(':id'=>$id))
->queryRow();
+ Thêm, sửa, xóa từ Jquery Builder
insert(): thêm một hàng (row) vào 1 bảng (table)
update(): trong một bảng
delete(): xóa dữ liệu từ một bảng
// build and execute the following SQL:
// INSERT INTO `tbl_user` (`name`, `email`) VALUES (:name, :email)
$command->insert('tbl_user', array(
'name'=>'Tester',
'email'=>'tester@example.com',
));
// build and execute the following SQL:
// UPDATE `tbl_user` SET `name`=:name WHERE id=:id
$command->update( 'tbl_user', array('name'=>'Tester',),
'id=:id', array(':id'=>1) );
// build and execute the following SQL:
// DELETE FROM `tbl_user` WHERE id=:id
$command->delete('tbl_user', 'id=:id', array(':id'=>1));
======== # Data Access Object (DAO) ======
======== FILTER function ========
+ Việc sử dụng dấu + - giúp ta chỉ rõ action nào là được thêm vào hoặc loại bớt
+ Ta có thể tùy biến sử dụng filter bằng cách sử dụng toán tử cộng (+) và trừ (-).
Toán tử (+) cho phép filter đó chỉ được áp dụng đối với action kèm theo.
Toán tử (-) cho phép filter đó được áp dụng cho tất cả các action ngoại trừ action kèm theo.
======== # FILTER function ========
======== STATIC PAGE ========
+ Vào views/site/pages/ tạo file staticpage.php
+ Sau đó truy cập url web.com/index.php/site/page?view=staticpage
======== # STATIC PAGE ========
======== Relationship
BELONGS_TO: quan hệ giữa bảng A và B là 1 - nhiều, ví dụ bài viết thuộc user.
HAS_MANY: A và B là 1 - nhiều, A có nhiều B. ví dụ 1 user viểt nhiều post.
HAS_ONE: A và B là quan hệ 1 - 1, ví dụ 1 user chỉ có 1 profile.
MANY_MANY: A và B là quan hệ nhiều - nhiều. Ví dụ post có nhiều category và categorry có thể có nhiều post.
STAT: giúp thống kê
======== Relationship
+ Nên chứa các thuộc tính đại diện cho các dữ liệu cụ thể.
+ Nên chứa các business logic nhằm đảm bảo các dữ liệu đáp ứng được yêu cầu thiết kế
+ Có thể chứa các mã thao tác với database
+ Tránh sử dụng $_GET, $_POST hoặc các biến trực tiếp gắn liến với request của người dùng
+ Tránh nhúng các mã HTML hoặc các mã trình diễn khác (echo, …)
+ Model là 1 đối tượng của lớp CModel hoặc một class kế thừa CModel
+ Model dùng để giữ dữ liệu và những luật kinh doanh, thường là đại diện cho 1 row trong bảng table của database hoặc là 1 form input.
+ 1 Model tượng trưng cho 1 đối tượng dữ liệu độc lập
+ Yii implement 2 loại model: Form Model và Active Record. Cả 2 đều kế thừa từ CModel
+ Form Model là đối tượng của CFormModel. Form Model sử dụng để lưu trữ dữ liệu được thu thập từ form bởi user.
+ Active Record (AR) là kiểu design pattern sử dụng database trừu tượng để truy cập vào 1 kiểu hướng đối tượng. Đối tượng AR là đối tượng của CActiveRecord hoặc của một class con của class này, tượng trưng cho một hàng trong 1 bảng của database. Mỗi field trong hàng này tượng trưng cho thuộc tính của AR.
+ Khai báo những thuộc tính trong Model, ta khai báo những biến đó trong class atributeLabel() và nếu ta muốn save chúng thì ta viết trong hàm afterSave. Ví dụ ta khai báo biến create_time thì ta code: $this->create_time = Tỉme();
+ Một vài phương thức liên quan đến truy vấn CSDL:
# Protected Methods + # Events: beforSave() / afterSave(), beforeDelete() / afterDelete(), beforeValidate() / afterValidate(), beforFind() / afterFind().
======== # MODEL =======
======== VIEW ========-
+ Nên Chứa các mã trình diễn, như HTML, PHP, ASP, đơn giản để thể định dạng dữ liệu
+ Có thể truy cập các thuộc tính (property) và phương thức (method
controller và model nhưng chỉ với mục đích trình bày.
+ Tránh chứa các mã truy vấn dữ liệu
+ Tránh truy cập trực tiếp đến $_GET, $_POST, hoặc các biến tương tự khác đại diện cho request của người dùng.
+ Trong view ta có thể sử dụng $this để đại diện cho đối tượng controller
+ Get thuộc tính trong view $this->properties.
+ Chúng ta có thể render thuộc tính như sau trong controller:
$this->render(’edit’, array(
’var1’=>$value1,
’var2’=>$value2,
)
+ Trong view ta sẽ gọi $var1 và $var2
+ Trong view ta gọi widget CListView
widget('zii.widgets.CListView', array(
'dataProvider'=>$dataProvider, // đưa mảng dữ liệu vào
'itemView'=>' _view, // file _view.php trong views folder
'template'=>"{items}\n{pager}",
)); ?>
+ Các phương thức khi làm việc với view
- render() : render a view with layout
- renderDynamic() : render nội dung động được trả về từ 1 callback xác định.
- renderFile() renderInternal(): render một file view.
- renderPartial() : render một view.
- renderText() : render một static text.
- beforRender() + afterRender()
======== # VIEW ========
======== # CONTROLLER ========
+ Có thể truy cập $_GET, $_POST và các biến tương tự khác đại diện cho request của người dùng.
+ Có thể tạo ra các thực thể (instance) của model.
+ Tránh code các câu lệnh truy vấn SQL hoặc code bất kỳ mã HTML hoặc các ngôn ngữ trình diễn khác.
======== # CONTROLLER ========
======== LAYOUT ========
+ Render 1 view không sử dụng bất cứ layout nào ta dùng renderPartial().
WIDGET
+ Widget là 1 đối tượng của lớp CWidget hoặc lớp con của lớp CWidget
+ Cách gọi Widget
beginWidget(’path.to.WidgetClass’); ?>
...body content that may be captured by the widget..
endWidget(); ?>
or
widget(’path.to.WidgetClass’); ?>
+ $this trong view của widget cũng được sử dụng để đại diện cho controller
======== # LAYOUT ========
======== COMPONENTS ========
+ Yii được xây dựng trên các component. Sử dụng các Component chủ yếu liên quan đến việc truy cập các thuộc tính của nó và nâng cao xử lí sự kiện. Component là đối tượng quản lí Event và Behavior.
+ Có 2 cách để khai báo properties Component.
C1: mô tả biến public trong class kế thừa CComponent
class Document extends CComponent { public $textWidth; }
C2: dùng hàm get, set để khai báo
COMPONENTS EVENT
+ Các method được gán trong một sự kiện sẽ được tự động thực thi mỗi khi sự kiện được
gọi (raise)
+ Component event là 1 biến đặc biệt mà nó lấy 1 phương thức như là giá trị của chúng.
+ Khi event được gọi thì hàm tự động cũng được gọi.
+ Để khai báo một sự kiện trong component, ta phải khao báo một method bắt đầu bằng on ví dụ onClick()
COMPONENTS BEHAVIOR
+ 1 component có thể hỗ trợ kiểu mixin và nó có thể được cố định với 1 hoặc 1 vài hành vi.
+ 1 hành vi là 1 đối tượng mà các mehods của nó có thể kế thừa bởi chính component gộp của chính hành vi đó, điều đó có nghĩa là nó thu thập chức năng thay thế cho việc chuyên môn hóa.
+ 1 component có thể được gán 1 vài hành vi (behavior), vì thế nó có thể đạt được tính đa kế thừa.
+ Những class behavior phải được implement từ interface IBehavior.
+ Để sử dụng 1 behavior, trước tiên nó phải được gán vào một component qua phươnng thức $component->attachBehavior($name, $behavior) sau đó ta có thể sử dụng phương thức của behavior thông qua component $component->methodBehavior()
======== # COMPONENTS ========
======== Data Access Object (DAO) ========
DAO cung cấp một API chung để truy cập dữ liệu được lưu trữ trong hệ thống quản lý CSDL khác nhau.
Yii DAO chủ yếu bao gồm 4 lớp (class) sau:
1. CDbConnection: đại diện cho một kết nối đến CSDL
2. CDbCommand: đại diện cho một câu lệnh truy vấn SQL để thực hiện trên CSDL
3. CDbDataReader: đại diện cho một tập hợp các hàng (row) từ kết quả câu truy vấn
4. CdbTransaction: đại diện cho một giao dịch (transaction) với DB.
Thiết lập kết nối DB, ta tạo CdbConnection object như sau:
$conn = new CDbConnection($dsn, $username, $password);
$conn->active = true; // Start connect
// Get data ....
$conn->active = false; // Close connect
Danh sách các $dns cho mỗi database
+ SQLite = sqlite:/path/to/dbfile
+ MySQL = mysql:host=localhost;dbname=dbname;
+ PostgreSQL: pgsql:host=localhost;port=5432;dbname=testdb
+ SQL Server: mssql:host=localhost;dbname=testdb
+ Oracle: oci:dbname=//localhost:1521/testdb
Nếu ta cấu hình DB trong file config/main thì ta truy cập DB connection như sau
$conn = Yii::app()->db;
Khi kết nối thành công các, ta sử dụng CDbCommand để truy vấn SQL.
Ta dùng CDbConnection::createCommand()
$command = CDbConnection::createCommand();
$rowCount=$command->execute(); // execute the non-query SQL
$dataReader=$command->query(); // execute a query SQL
$rows=$command->queryAll(); // query and return all rows of result
$row=$command->queryRow(); // query and return the first row of result
$column=$command->queryColumn(); // query and return the first column of result
$value=$command->queryScalar(); // query and return the first field in the first row
Một câu lệnh CdbCommand được thực thi = 1 trong 2 cách sau:
execute(): thực hiện non-query SQL, như INSERT, UPDATE và DELETE
query(): thực hiện câu truy vấn trả về tập hợp các hàng (row) dữ liệu, như SELECT
Lấy data ta sử dụng CdbDataReader()->read()
$dataReader=$command->query();
// calling read() repeatedly until it returns false
while(($row=$dataReader->read())!==false) { ... }
// using foreach to traverse through every row of data
foreach($dataReader as $row) { ... }
// retrieving all rows at once in a single array
$rows=$dataReader->readAll();
Using Transactions (Sử dụng transaction)
Để sử dụng transaction (giao dịch) ta sử dụng cấu trúc như sau:
$transaction=$connection->beginTransaction();
try {
$connection->createCommand($sql1)->execute();
$connection->createCommand($sql2)->execute();
//.... other SQL executions
$transaction->commit();
} catch(Exception $e) {
// an exception is raised if a query fails
$transaction->rollBack();
}
Truyền tham số vào câu truy vấn SQL
// http://www.php.net/manual/en/pdostatement.bindparam.php
// an SQL with two placeholders ":username" and ":email"
$sql="INSERT INTO tbl_user (username, email) VALUES(:username,:email)";
$command=$connection->createCommand($sql);
// replace the placeholder ":username" with the actual username value
$command->bindParam(":username",$username,PDO::PARAM_STR);
// replace the placeholder ":email" with the actual email value
$command->bindParam(":email",$email,PDO::PARAM_STR);
$command->execute();
// insert another row with a new set of parameters
$command->bindParam(":username",$username2,PDO::PARAM_STR);
$command->bindParam(":email",$email2,PDO::PARAM_STR);
$command->execute()
QUERY BUILDER
+ Yii Query Builder cung cấp việc viết các câu lệnh SQL theo hướng đối tượng. Nó cho
phép sử dụng các phương thức và thuộc tính để chia nhỏ câu lệnh SQL thành các phần
đơn giản hơn. Các phần đó sau đó được Yii kết hợp lại và thực thi thông qua DAO.
$user = Yii::app()->db->createCommand()
->select('id, username, profile')
->from('tbl_user u')
->join('tbl_profile p', 'u.id=p.user_id')
->where('id=:id', array(':id'=>$id))
->queryRow();
+ Các phương thức liên quan đến Query Builder
select(): specifies the SELECT part of the query
selectDistinct(): specifies the SELECT part of the query and turns on the DISTINCT flag
from(): specifies the FROM part of the query
where(): specifies the WHERE part of the query
join(): appends an inner join query fragment
group(): specifies the GROUP BY part of the query
having(): specifies the HAVING part of the query
order(): specifies the ORDER BY part of the query
limit(): specifies the LIMIT part of the query
offset(): specifies the OFFSET part of the query
union(): appends a UNION query fragment
$users = Yii::app()->db->createCommand()
->select('*')
->from('tbl_user')
->queryAll();
$user = Yii::app()->db->createCommand()
->select('id, username, profile')
->from('tbl_user u')
->join('tbl_profile p', 'u.id=p.user_id')
->where('id=:id', array(':id'=>$id))
->queryRow();
+ Thêm, sửa, xóa từ Jquery Builder
insert(): thêm một hàng (row) vào 1 bảng (table)
update(): trong một bảng
delete(): xóa dữ liệu từ một bảng
// build and execute the following SQL:
// INSERT INTO `tbl_user` (`name`, `email`) VALUES (:name, :email)
$command->insert('tbl_user', array(
'name'=>'Tester',
'email'=>'tester@example.com',
));
// build and execute the following SQL:
// UPDATE `tbl_user` SET `name`=:name WHERE id=:id
$command->update( 'tbl_user', array('name'=>'Tester',),
'id=:id', array(':id'=>1) );
// build and execute the following SQL:
// DELETE FROM `tbl_user` WHERE id=:id
$command->delete('tbl_user', 'id=:id', array(':id'=>1));
======== # Data Access Object (DAO) ======
======== FILTER function ========
+ Việc sử dụng dấu + - giúp ta chỉ rõ action nào là được thêm vào hoặc loại bớt
+ Ta có thể tùy biến sử dụng filter bằng cách sử dụng toán tử cộng (+) và trừ (-).
Toán tử (+) cho phép filter đó chỉ được áp dụng đối với action kèm theo.
Toán tử (-) cho phép filter đó được áp dụng cho tất cả các action ngoại trừ action kèm theo.
======== # FILTER function ========
======== STATIC PAGE ========
+ Vào views/site/pages/ tạo file staticpage.php
+ Sau đó truy cập url web.com/index.php/site/page?view=staticpage
======== # STATIC PAGE ========
======== Relationship
BELONGS_TO: quan hệ giữa bảng A và B là 1 - nhiều, ví dụ bài viết thuộc user.
HAS_MANY: A và B là 1 - nhiều, A có nhiều B. ví dụ 1 user viểt nhiều post.
HAS_ONE: A và B là quan hệ 1 - 1, ví dụ 1 user chỉ có 1 profile.
MANY_MANY: A và B là quan hệ nhiều - nhiều. Ví dụ post có nhiều category và categorry có thể có nhiều post.
STAT: giúp thống kê
======== Relationship
Subscribe to:
Posts (Atom)