lazy/db

ORM for PHP >= 5.3.0

Installs: 16

Dependents: 0

Stars: 5

Watchers: 1

Language: PHP

dev-master 2014-03-16 06:23 UTC

README

THIS PROJECT DOESN'T MAINTAIN ANYMORE

I'M RECOMMEND TO USE LAZY FRAMEWORK INSTEAD.

Build Status

Release information

THIS RELEASE IS A DEVELOPMENT RELEASE AND NOT INTENDED FOR PRODUCTION USE. PLEASE USE AT YOUR OWN RISK

Features

  • Comprehensive ORM layer for mapping records to PHP objects
  • Eager loading associations
  • Dirty tracking
  • Lazy load support
  • Solving N+1 problem

Getting Start

1. Setup connection
<?php
use Lazy\Db\Connection;

Connection::setEnv(Connection::ENV_DEVELOPMENT);
Connection::setDefaultConfig(array(
    'development' => array(
        'dsn' => 'mysql:host=localhost;dbname=lazy_db_test',
        'username' => 'root'
    )
));

2. Define models

<?php
use Lazy\Db\AbstractModel;

class User extends AbstractModel
{
    protected static $columns = [
      'id'        => 'int',
      'name'      => 'varchar',
      'username'  => 'varchar',
      'password'  => 'varchar',
      'activated' => 'tinyint'
    ],

    protected static $oneToMany = ['Posts'];
}

class Post extends AbstractModel
{
    protected static $columns = [
      'id'            => 'int',
      'user_id'       => 'int',
      'name'          => 'varchar',
      'content'       => 'text',
      'created_time'  => 'datetime',
      'modified_time' => 'timestamp',
    ],

    protected static $manyToOne = ['User'];
}

3. Interact with models

# find one by primary key value
$user = User::first(1);
echo $user->name;
foreach ($user->Posts as $post) {
    echo $post->name;
}

# find all
$users = User::all(['activated' => 1])->limit(3);
foreach ($users as $user) {
  echo $user->name;
  foreach ($user->Posts as $post) {
      echo $post->name;
  }
}
// in this case, it just execute 2 queries
# SELECT id, name, username, password, activated FROM users WHERE (activated = 1) LIMIT 3;
# SELECT id, user_id, name, created_time, modified_time FROM posts WHERE (user_id IN(1, 2, 3));