CodeIgniter 5.rész - Query Builder

Ti kérdeztek, mi válaszolunk!
A CodeIgniter hozzáférést biztosít a Query Builder osztályhoz. Ez a mintázat lehetővé teszi az információk lekérését, beillesztését és frissítését az adatbázisban. Az egyszerűség kedvéért a Query Builder funkciók egyik legfontosabb előnye, hogy lehetővé teszi adatbázis-független alkalmazások létrehozását, mivel a lekérdezés szintaxisát az egyes adatbázis-adapterek generálják.

Adatok lekérdezése

A get() függvény lekéri egy tábla összes sorát.
$query = $this->db->get('mytable');  // Produces: SELECT * FROM mytable
A get() függvéy hívásakor lehetőségünk van megadni második és harmadik paramétert is amivel limitálni tudjuk a lekérdezés által visszaadott sorokat.
$query = $this->db->get('mytable', 10, 20);

// Executes: SELECT * FROM mytable LIMIT 20, 10
A get_compiled_select() visszaadja a lekérdezést sztringként.
$sql = $this->db->get_compiled_select('mytable');
echo $sql;

// Prints string: SELECT * FROM mytable
A get_where() függvénnyel a lekérdezéshez WHERE záradékot adhatunk hozzá.
$query = $this->db->get_where('mytable', array('id' => $id), $limit, $offset);
Ha nem szeretnénk a tábla összes oszlopát lekérni akkor használjuk a select() függvényt.
$this->db->select('title, content, date');
$query = $this->db->get('mytable');

// Executes: SELECT title, content, date FROM mytable
A select_max függvény egy adott mezőnév alapján visszaadja a legnagyobb értékű sort, második paramétere opcionális, aliast-t adhatunk a mező nevének.
$this->db->select_max('age');
$query = $this->db->get('members');  // Produces: SELECT MAX(age) as age FROM members

$this->db->select_max('age', 'member_age');
$query = $this->db->get('members'); // Produces: SELECT MAX(age) as member_age FROM members
A select_min függvény egy adott mezőnév alapján visszaadja a legkisebb értékű sort, második paramétere opcionális, aliast-t adhatunk a mező nevének.
$this->db->select_min('age');
$query = $this->db->get('members'); // Produces: SELECT MIN(age) as age FROM members
A select_avg átlagot ad vissza, második paramétere opcionális, aliast-t adhatunk a mező nevének.
$this->db->select_avg('age');
$query = $this->db->get('members'); // Produces: SELECT AVG(age) as age FROM members
A select_sum egyértelműen összeget ad vissza, második paramétere opcionális, aliast-t adhatunk a mező nevének.
$this->db->select_sum('age');
$query = $this->db->get('members'); // Produces: SELECT SUM(age) as age FROM members
A from() függvénnyel megadhatjuk, hogy melyik táblából szeretnénk adatokat lekérni.
$this->db->select('title, content, date');
$this->db->from('mytable');
$query = $this->db->get();  // Produces: SELECT title, content, date FROM mytable
A join() függvénnyel táblákat tudunk összekapcsolni.
$this->db->select('*');
$this->db->from('blogs');
$this->db->join('comments', 'comments.id = blogs.id');
$query = $this->db->get();

// Produces:
// SELECT * FROM blogs JOIN comments ON comments.id = blogs.id
A where() függvénnyel feltételeket tehetünk a lekérdezésünkbe.
$this->db->where('name', $name); // Produces: WHERE name = 'Joe'
Akár többet egymás után.
$this->db->where('name', $name);
$this->db->where('title', $title);
$this->db->where('status', $status);
// WHERE name = 'Joe' AND title = 'boss' AND status = 'active'
Egyéb összehasonlítások.
$this->db->where('name !=', $name);
$this->db->where('id <', $id); // Produces: WHERE name != 'Joe' AND id < 45
A where() függvénynek tömböt is adhatunk át.
$array = array('name' => $name, 'title' => $title, 'status' => $status);
$this->db->where($array);
// Produces: WHERE name = 'Joe' AND title = 'boss' AND status = 'active'
Természetesen a where záradékot magunk is megírhatjuk.
$where = "name='Joe' AND status='boss' OR status='active'";
$this->db->where($where);
A where_in függvény
$names = array('Frank', 'Todd', 'James');
$this->db->where_in('username', $names);
// Produces: WHERE username IN ('Frank', 'Todd', 'James')
A like() függvénnyel keresni tudunk az adatbázisban.
$this->db->like('title', 'match');
// Produces: WHERE `title` LIKE '%match%' ESCAPE '!'
Ugyanúgy mint a where függvénynél úgy itt is többször meghívhatjuk.
$this->db->like('title', 'match');
$this->db->like('body', 'match');
// WHERE `title` LIKE '%match%' ESCAPE '!' AND  `body` LIKE '%match% ESCAPE '!'
Tömböt is adahtunk át a like() függvénynek.
$array = array('title' => $match, 'page1' => $match, 'page2' => $match);
$this->db->like($array);
// WHERE `title` LIKE '%match%' ESCAPE '!' AND  `page1` LIKE '%match%' ESCAPE '!' AND  `page2` LIKE '%match%' ESCAPE '!'
A group_by() függvény használata.
$this->db->group_by("title"); // Produces: GROUP BY title
Egyértelműen több paramétert is kaphat.
$this->db->group_by(array("title", "date"));  // Produces: GROUP BY title, date

Adatok rendezése

Az order_by() függvénnyel rendezhetjük az adatokat.
$this->db->order_by('title', 'DESC');
// Produces: ORDER BY `title` DESC

$this->db->order_by('title DESC, name ASC');
// Produces: ORDER BY `title` DESC, `name` ASC

$this->db->order_by('title', 'DESC');
$this->db->order_by('name', 'ASC');
// Produces: ORDER BY `title` DESC, `name` ASC
Ha véletlenszerűen szeretnénk adatot visszakapni.
$this->db->order_by('title', 'RANDOM');
// Produces: ORDER BY RAND()

$this->db->order_by(42, 'RANDOM');
// Produces: ORDER BY RAND(42)
A limit() függvénnyel szabhatjuk meg hogy hány sort adjon vissza a lekérdezés.
$this->db->limit(10);  // Produces: LIMIT 10
A count_all függvény visszaadja egy tábla sorainak számát.
echo $this->db->count_all('my_table');  // Produces an integer, like 25

Adatok feltöltése

Az insert() függvénnyel tudunk adatokat feltölteni egy táblába, első paramétere a tábla neve a második pedig egy tömbb az adatokkal.
$data = array(
        'title' => 'My title',
        'name' => 'My Name',
        'date' => 'My date'
);

$this->db->insert('mytable', $data);
// Produces: INSERT INTO mytable (title, name, date) VALUES ('My title', 'My name', 'My date')
A get_compiled_insert() sztringként visszaadja az összeállított sql-t.
$data = array(
        'title' => 'My title',
        'name'  => 'My Name',
        'date'  => 'My date'
);

$sql = $this->db->set($data)->get_compiled_insert('mytable');
echo $sql;

// Produces string: INSERT INTO mytable (`title`, `name`, `date`) VALUES ('My title', 'My name', 'My date')
Az insert_batch függvénnyel egy kéréssel több sort is felvihetünk a táblába.
$data = array(
        array(
                'title' => 'My title',
                'name' => 'My Name',
                'date' => 'My date'
        ),
        array(
                'title' => 'Another title',
                'name' => 'Another Name',
                'date' => 'Another date'
        )
);

$this->db->insert_batch('mytable', $data);
// Produces: INSERT INTO mytable (title, name, date) VALUES ('My title', 'My name', 'My date'),  ('Another title', 'Another name', 'Another date')

Adatok frissítése

Az update() függvénnyel átírhatjuk egy adott sor adatait.
$data = array(
        'title' => $title,
        'name' => $name,
        'date' => $date
);

$this->db->where('id', $id);
$this->db->update('mytable', $data);
// Produces:
//
//      UPDATE mytable
//      SET title = '{$title}', name = '{$name}', date = '{$date}'
//      WHERE id = $id

Adatok törlése

A delete() függvénnyel sorokat törölhetünk egy táblából.
$this->db->delete('mytable', array('id' => $id));  // Produces: // DELETE FROM mytable  // WHERE id = $id