Это хороший вопрос, но ответ на него зависит от вашего уровня. Очень сильно зависит.
Специалисты вам наверняка посоветуют Doctrine или Cycle. Но вы их явно не потянете.
Для знакомства с ORM я бы порекомендовал Eloquent, при всех минусах этого выбора.
Но если честно, то учитывая, что вы ищете замену RB, я бы порекомендовал начать с самого простого.
spoilerНаписать ORM руками. Причем даже не классический, поддерживающий связи и квери билдер, а совсем простой Table Gateway, типа такого:
abstract class BasicTableGateway
{
protected $db;
protected $table;
protected $fields;
protected $primary = 'id';
public function __construct(\PDO $db)
{
$this->db = $db;
}
public function read($id): ?array
{
$stmt =$this->db->prepare("SELECT * FROM `$this->table` WHERE `$this->primary`=?");
$stmt->execute([$id]);
return $stmt->fetch();
}
public function insert($data): int
{
$this->validate($data);
$fields = '`'.implode("`,`", array_keys($data)).'`';
$placeholders = str_repeat('?,', count($data) - 1) . '?';
$sql = "INSERT INTO `$this->table` ($fields) VALUES ($placeholders)";
$this->db->prepare($sql)->execute(array_values($data));
return $this->db->lastInsertId();
}
protected function validate($data)
{
$diff = array_diff(array_keys($data), $this->fields);
if ($diff) {
throw new \InvalidArgumentException("Unknown field(s): ". implode($diff));
}
}
}
И дальше применять его примерно так
class UserGateway extends BasicTableGateway {
protected $table = 'gw_users';
protected $fields = ['email', 'password', 'name', 'birthday'];
}
$userGateway = new UserGateway($pdo);
$data = [
'email' => 'foo@bar.com',
'password' => 123,
'name' => 'Fooster',
];
$id = $userGateway->insert($data);
$user = $userGateway->read($id);
echo json_encode($user),PHP_EOL;
И никаких тебе "бинов" - обычный ПДО, обычные массивы, все просто и наглядно.
Хотя пожалуй
Dr. Bacon прав, вам и это будет сложновато. Возьмите лучше просто функцию:
function pdo($pdo, $sql, $args = NULL)
{
if (!$args)
{
return $pdo->query($sql);
}
$stmt = $pdo->prepare($sql);
$stmt->execute($args);
return $stmt;
}
и дальше просто запросами
// Create
pdo($pdo, "INSERT INTO users VALUES (null, ?,?,?)", [$name, $email, $password]);
// Read
$user = pdo($pdo, "SELECT * FROM users WHERE email=?", [$email])->fetch();
// Update
pdo($pdo, "UPDATE users SET name=:name WHERE id=:id", ['id'=>$id, 'name'=>$name]);
// Delete
$deleted = pdo($pdo, "DELETE FROM users WHERE id=?", [$id])->rowCount();
После того, как SQL будет отскакивать от зубов - можно будет посмотреть в сторону какого-нибудь ORM