Shaiful là đúng, phát biểu như các ngươi đã ghi sai nhưng tôi chỉ muốn mở rộng lên này mà bạn phải cẩn thận với or_
khoản trong Active Record. Trong CodeIgniter những không sử dụng dấu ngoặc, vì vậy sau đây là tốt:
$this->db->select('*');
$this->db->like('name', $name);
$this->db->or_like('surname', $surname);
$query = $this->db->get('workers');
Nó tạo:
SELECT * FROM `workers` WHERE `name` LIKE `%$name%` OR `surname` LIKE `%$surname%`;
Nhưng nếu bạn mở rộng truy vấn vào một ngày sau, sau đây sẽ không hoạt động chính xác:
$this->db->select('*');
$this->db->where('id', $id);
$this->db->like('name', $name);
$this->db->or_like('surname', $surname);
$query = $this->db->get('workers');
này tạo ra:
SELECT * FROM `workers` WHERE `id`=`$id` AND `name` LIKE `%$name%` OR `surname` LIKE `%$surname%`;
Vấn đề với ví dụ thứ hai là mệnh đề WHERE
trở thành tùy chọn do sau OR
trong SQL.
Codeigniter 3 đã mang đến khả năng sử dụng dấu ngoặc và tôi khuyên bạn nên sử dụng phương pháp sau nếu có khả năng truy vấn của bạn sẽ trở nên phức tạp hơn sau này.
Vì vậy, một cách tiếp cận an toàn hơn trong quan điểm của tôi khi sử dụng or_
khoản sẽ là:
$query = $this->db->select('*')->from('workers')
->group_start()
->like('name', $name)
->or_like('surname', $surname)
->group_end()
->get();
Trong ví dụ hiện tại của bạn, mặc dù không có vấn đề với những gì Shaiful đã đưa ra và nó hoàn toàn CodeIgniter 2 tương thích.