Query Builder
Query builder-ul db() oferă acces direct la baza de date fără a trece prin modele ORM. Este util pentru interogări complexe, agregări, DDL și operațiuni care nu se potrivesc pe un singur model.
Funcția db()
// Conexiunea implicită (din config/database.php)
$conn = db();
// Conexiune numită
$conn = db('company');
$conn = db('workleto');
// Dotted notation: instance + database override
$conn = db('workleto.company_data');Funcția returnează o instanță Connection care expune builder-e fluente pentru fiecare tip de operațiune.
SELECT
// Select simplu
$users = db('company')
->select('id', 'name', 'email')
->from('users')
->where('active', 1)
->orderBy('name')
->limit(10)
->resultset();
// Select cu *
$all = db()->select('*')->from('modules')->resultset();
// O singură celulă (scalar)
$count = db('company')
->select('COUNT(*)')
->from('users')
->cell();
// O singură coloană
$names = db('company')
->select('name')
->from('users')
->col();
// Un singur rând
$user = db('company')
->select('*')
->from('users')
->where('id', 1)
->single();WHERE
db('company')->select()->from('users')
->where('status', 'active') // egal
->where('age', '>', 18) // operator explicit
->where('name', 'LIKE', '%Ion%') // LIKE
->where('id', 'IN', [1, 2, 3]) // IN
->where('deleted_at', null) // IS NULL
->orWhere('role', 'admin') // OR
->whereGroup(function ($q) { // grup cu paranteze
$q->where('a', 1)->orWhere('b', 2);
})
->resultset();JOIN, GROUP BY, HAVING
db('company')
->select('u.name', 'COUNT(o.id) as order_count')
->from('users u')
->leftJoin('orders o', 'u.id = o.user_id')
->groupBy('u.id')
->having('order_count', '>', 5)
->orderBy('order_count', 'DESC')
->resultset();Paginare
$results = db('company')
->select('*')
->from('users')
->orderBy('name')
->page(1, 20) // pagina 1, câte 20
->resultset();INSERT
// Inserare simplă
db('company')->insert('users', [
'name' => 'Ion Popescu',
'email' => 'ion@example.com',
]);
// Obține ID-ul inserat
$id = db('company')->insert_id();Exemplu real:
db()->insert('companies', [
'name' => $nume,
'namespace' => $namespace,
'package' => $package,
]);UPDATE
db('company')
->update('users')
->set('name', 'Nume nou')
->set('email', 'email@nou.com')
->where('id', 1)
->execute();Exemplu real:
db('company')->update('company_api_tokens', [
'last_used' => date('Y-m-d H:i:s'),
'count' => $token['count'] + 1,
])
->where('token_uuid', $tokenUuid)
->execute();DELETE
db('company')
->delete('users')
->where('id', 1)
->execute();Exemplu real:
db()->delete('modules')
->where('module_name', $moduleName)
->execute();Tranzacții
db('company')->transaction(function () {
db('company')->insert('orders', ['total' => 100]);
$orderId = db('company')->insert_id();
db('company')->insert('order_items', [
'order_id' => $orderId,
'product_id' => 5,
'quantity' => 2,
]);
});Metoda transaction() execută closure-ul într-o tranzacție — face commit automat la final sau rollback dacă apare o excepție.
DDL
// CREATE TABLE
db()->createTable('logs', function ($table) {
$table->id();
$table->string('message', 500);
$table->text('context');
$table->timestamp('created_at');
});
// ALTER TABLE
db()->alterTable('users')
->addColumn('phone', 'VARCHAR(20)')
->execute();
// DROP TABLE
db()->dropTable('temp_data');
// TRUNCATE
db()->truncate('sessions');cell(), single(), col(), resultset()
| Metodă | Returnează |
|---|---|
resultset() | array de rânduri (array-uri asociative) |
single() | Un singur rând (array asociativ) sau null |
cell() | O singură valoare scalară (prima coloană) |
col() | Un array cu valorile unei singure coloane |
Conexiuni multiple
// Conectare la baza de date a unei companii specifice
$db = db('workleto.' . DB_PREFIX_COMPANY_DATA . $companyNamespace);
$data = $db->select('*')->from('users')->resultset();Dotted notation-ul workleto.nume_db refolosește configurația instanței workleto dar schimbă baza de date.