FuelPHP Bin
<?php class Model_Client extends \Orm\Model { protected static $_properties = array( 'id', 'name', 'created_at', 'updated_at', ); protected static $_has_many = array( 'settings' => array( 'key_from' => 'id', // key in this model 'model_to' => 'Model_Setting', // related model 'key_to' => 'client_id', // key in the related model 'cascade_save' => true, // update the related table on save 'cascade_delete' => false, // delete the related data when deleting the parent ), 'meta' => array( 'key_from' => 'id', // key in this model 'model_to' => 'Model_Meta', // related model 'key_to' => 'client_id', // key in the related model 'cascade_save' => true, // update the related table on save 'cascade_delete' => false, // delete the related data when deleting the parent ), ); protected static $_eav = array( 'settings' => array( // we use the statistics relation to store the EAV data 'model_to' => 'Model_Setting', 'attribute' => 'key', // the key column in the related table contains the attribute 'value' => 'value', // the value column in the related table contains the value ), 'meta' => array( // we use the statistics relation to store the EAV data 'model_to' => 'Model_Meta', 'attribute' => 'key', // the key column in the related table contains the attribute 'value' => 'value', // the value column in the related table contains the value ), ); protected static $_observers = array( 'Orm\Observer_CreatedAt' => array( 'events' => array('before_insert'), 'mysql_timestamp' => false, ), 'Orm\Observer_UpdatedAt' => array( 'events' => array('before_save'), 'mysql_timestamp' => false, ), 'Observer_Id' => array( 'events' => array('before_insert'), 'mysql_timestamp' => false, ), ); public static function validate($factory) { $val = Validation::forge($factory); $val->add_field('name', 'Name', 'required|max_length[255]'); return $val; } } <?php class Model_Meta extends \Orm\Model { protected static $_properties = array( 'id', 'client_id', 'key', 'value', 'created_at', 'updated_at', ); protected static $_belongs_to = array( 'client' => array( 'key_from' => 'client_id', 'model_to' => 'Model_Client', 'key_to' => 'id', 'cascade_save' => true, 'cascade_delete' => false, ) ); protected static $_observers = array( 'Orm\Observer_CreatedAt' => array( 'events' => array('before_insert'), 'mysql_timestamp' => false, ), 'Orm\Observer_UpdatedAt' => array( 'events' => array('before_save'), 'mysql_timestamp' => false, ), ); public static function validate($factory) { $val = Validation::forge($factory); $val->add_field('key', 'Key', 'required|max_length[255]'); $val->add_field('value', 'Value', 'required'); return $val; } } <?php class Model_Setting extends \Orm\Model { protected static $_properties = array( 'id', 'client_id', 'key', 'value', 'created_at', 'updated_at', ); protected static $_belongs_to = array( 'client' => array( 'key_from' => 'client_id', 'model_to' => 'Model_Client', 'key_to' => 'id', 'cascade_save' => true, 'cascade_delete' => false, ) ); protected static $_observers = array( 'Orm\Observer_CreatedAt' => array( 'events' => array('before_insert'), 'mysql_timestamp' => false, ), 'Orm\Observer_UpdatedAt' => array( 'events' => array('before_save'), 'mysql_timestamp' => false, ), ); public static function validate($factory) { $val = Validation::forge($factory); $val->add_field('key', 'Key', 'required|max_length[255]'); $val->add_field('value', 'Value', 'required|max_length[255]'); return $val; } }