Kohana 3 :: ORM Simple example


This is a simple example of a single ORM model, that has no relationships, but uses validation on the fields.

SQL schema

CREATE TABLE IF NOT EXISTS `members` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `username` varchar(32) NOT NULL,
  `firstname` varchar(32) NOT NULL,
  `lastname` varchar(32) NOT NULL,
  `email` varchar(127) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;

Model

<?php defined('SYSPATH') or die('No direct access allowed.');
 
class Model_Member extends ORM {
 
    protected $_rules = array(
        'username' => array(
            'not_empty'  => NULL,
            'min_length' => array(4),
            'max_length' => array(32),
            'regex'      => array('/^[-\pL\pN_.]++$/uD'),
        ),
        'firstname' => array(
            'not_empty'  => NULL,
            'min_length' => array(4),
            'max_length' => array(32),
            'regex'      => array('/^[-\pL\pN_.]++$/uD'),
        ),
        'lastname' => array(
            'not_empty'  => NULL,
            'min_length' => array(4),
            'max_length' => array(32),
            'regex'      => array('/^[-\pL\pN_.]++$/uD'),
        ),
        'email' => array(
            'not_empty'  => NULL,
            'min_length' => array(4),
            'max_length' => array(127),
            'email'      => NULL,
        ),
    );
}
The $_rules array will be passed to a Validate object and tested when you call check().
Please notice that defining the primary key "id" in the model is not necessary. Also the table name in the database is plural and the model name is singular.

Controller

<?php defined('SYSPATH') or die('No direct access allowed.');
 
class Controller_Member extends Controller_Template {
 
    public function action_index()
    {
        // -------------
        // - Example 1 -
        // -------------
 
        // Create an instance of a model
        $member = ORM::factory('member');
 
        // Get all members with the First name "Peter" find_all()
        // means we get all records matching the query.
        $member->where('firstname', '=', 'Peter')->find_all();
 
        // Count records in the $member object
        $member->count_all();
 
        // -------------
        // - Example 2 -
        // -------------
 
        // Create an instance of a model
        $member = ORM::factory('member');
 
        // Get a member with the user name "bongo" find() means
        // we only want the first record matching the query.
        $member->where('username', '=', 'bongo')->find();
 
        // -------------
        // - Example 3 -
        // -------------
 
        // Create an instance of a model
        $member = ORM::factory('member');
 
        // Do a INSERT query
        $member->username = 'bongo';
        $member->firstname = 'Peter';
        $member->lastname = 'Smith';
        $member->save();
 
        // -------------
        // - Example 4 -
        // -------------
 
        // Create an instance of a model where the
        // table field "id" is "1"
        $member = ORM::factory('member', 1);
 
        // You can create the instance like below
        // If you do not want to use the "id" field
        $member = ORM::factory('member')->where('username', '=', 'bongo')->find();
 
        // Do a UPDATE query
        $member->username = 'bongo';
        $member->firstname = 'Peter';
        $member->lastname = 'Smith';
        $member->save();
    }
}
$member will be a PHP object where you can access the values from the query e.g. echo $member->firstname

8 comments:

Олександр Мудрик said...

nice! simple and clear! thanks!

cacovsky said...

indeed. very, very good.

Anonymous said...

how to show with view?(orm find_all)

Unknown said...
This comment has been removed by the author.
Unknown said...
This comment has been removed by the author.
https://drarpitagrawal.blogspot.com/ said...

nice blog for digital marketing and same information click here Best SMO | PPC Expert Indore

David said...

Great post.
https://www.domoticz.com/forum/memberlist.php?mode=viewprofile&u=29851

Anonymous said...

EN SON ÇIKAN PERDE MODELLERİ
numara onay
mobil ödeme bozdurma
Nft nasil alınır
ankara evden eve nakliyat
TRAFİK SİGORTASİ
dedektör
Kurma web sitesi
aşk kitapları

Post a Comment