Skip to content

Releases: kevind3v/brlayer

BrLayer CC v1.1.0

Choose a tag to compare

@kevind3v kevind3v released this 28 Oct 16:34

Novidade: Query para consultas com JOIN

Nova classe para relatórios, consultas com mais de uma tabela e filtros dinâmicos. O resultado vem em arrays associativos.

use BrLayer\Query;

$query = Query::create()
    ->select("u.id, u.first_name, c.name AS company")
    ->from("users u")
    ->leftJoin("companies c", "c.id", "u.company_id")
    ->where("u.status = ?", "ativo")
    ->andWhereIn("u.company_id", $empresas)
    ->order("u.first_name")
    ->limit(20);

$total = $query->count();      // ignora order, limit e offset (para paginação)
$users = $query->fetchArray();
  • Joins: innerJoin(), leftJoin() e join() para ON com mais de uma condição.
  • Condições: where(), andWhere(), orWhere(), com valores por ? (um por ? ou um só para todos) ou por :nome. Quantidade de valores errada lança exceção.
  • andWhereIn() com lista vazia não encontra nada; com NOT IN, não exclui nada.
  • count() por COUNT(*), inclusive com GROUP BY e DISTINCT.
  • Agrupamento e ordem: group()/order() validados, groupRaw()/orderRaw() para funções.
  • Outros recursos: limit(null)/offset(null), query() para SQL próprio, fail()/throwOnFail(), getStatement()/getParams().

select(), from(), os joins e o texto do where() vão para o SQL como foram escritos: nunca coloque dados do usuário neles.

Documentação completa no README.

Sem mudanças incompatíveis em relação à 1.0.0.

BrLayer CC v1.0.0

Choose a tag to compare

@kevind3v kevind3v released this 28 Oct 13:37

Primeira versão da BrLayer: camada de persistência para PHP 8.2+ com PDO e prepared statements, no padrão Active Record.

A BrLayer é a continuação da CoffeeCode DataLayer (Robson V. Leite), atualizada para o PHP 8.x, com correções de bugs, reforço de segurança e recursos novos.

Instalação

composer require brbunny/brlayer

Exemplo

use BrLayer\Model;

class User extends Model
{
    protected ?string $createdAt = "created_at";
    protected ?string $updatedAt = "updated_at";

    public function __construct()
    {
        parent::__construct("users", ["first_name"]);
    }
}

$users = (new User())->find("status = :status", ["status" => "ativo"])->order("first_name")->fetch(true);

$user = (new User())->fill($_POST, ["first_name", "last_name", "email"]);
$user->save();