[eluser]paulipv[/eluser]
I've worked to an advanced version of MY_Model (thats work most like a datamapper)
Some key features:
- Models are loaded automatly (they are checked in APPPATH and other third party folders).
- supports table read-only
- Automatic date inserts (fields are listed in array ex: array('created', 'date_added'))
- Automatic date updates
- Auto trim
- XSS Clean
- Support validation (validation callbacks in model works well also)
- Hooks for insert, update, delete, get, save.
- Adapters (create your own adapters for data manipulation, etc).
- Model relations:
Example:
Code:
$relations = array(
'users_meta' => array(
'fk' => 'user_id' ,
'join' => array('join_self_as' => 'user_id', 'join_other_as' => 'id'),
'delete' => TRUE // That is for cascade delete.
)
);
// Relations are checked when you run methods like delete, join_related, save_related
// Example
$model->join_related('other_model')->get();
// Multiple joins
$model->join_related('model1/model2/model3')->where(key,value)->get();
// Or
$model->join_related('*')->get();
- Dynamic methods (similar to Datamapper ORM)
get_by
get_by_field_and_otherfield
get_by_field_or_other_field
get_all_by
- Implemented save() method for inserts/update. (auto detection of what method to use).
// Some examples
Code:
// Saving/updating data
$model->set($data);
// Or
$model->field = 'value here';
// Or
$model->save($data); // insert/update methods available also
// Validate data..
// Skip validation also available on arg list or simply use:
// $model->skip_validation()->save();
if (!$model->save()) {
$errors = $model->validation_errors();
}
// Retrieve data
// $model->rows or $model->result() to get data
// $model->total_rows
// For a single row result $model->id (to return primary key)
$model->id = 1;
$model->get_row();
echo $model->field_name;
$model->where($key,$val)->get();
// Working with data addapter
$array_result = $model->where()->get()->to_array();
$json_result = $model->where()->get()->to_json();
$xml_result = $model->where()->get()->to_xml();
/** Xml look like:
<data>
<records>
<row_1>
<row data>
</row_1>
</records>
<tableinfo>
....
</tableinfo>
*/
$generate_table = $model->get($limit, $offset)->table($table_options);
// Other get methods supported
$model->get_by($where, $or_where);
// Get a single row based on primary key
$model->get_row(primary_value);
// Similar to get_by but returns multiple rows
$model->get_all_by();
// Magic
$model->get_all_by_field();
$model->get_all_by_field_and_otherfield();
$model->get_all_by_field_or_otherfield();
// Get many/Get many by / Get all
$model->get_many();
$model->get_many_by();
$model->get_all();
// Count methods
$model->count_by($args);
$model->count_all();
// Working with date adapter
$model->today()->get();
$model->yesterday()->get();
$model->current_month()->get();
$model->last_month()->get();
$model->current_year()->get();
$model->last_year()->get();
$model->year(year)->get();
$model->month(month)->get();
$model->day(day)->get();
$model->hour(hour)->get();
$model->minute(minute)->get();
$model->where_date(custom_date , '= , > , <')->get();
$model->between('start' , 'end')->get();
// Other methods
// between_months/between_days
Code:
Available public methods:
exists()
record_exists()
get()
get_by()
get_row()
get_all_by()
get_many()
get_many_by()
get_all()
count_by()
count_all()
save()
save_related()
set()
insert()
insert_many()
update()
update_many()
update_by()
update_all()
update_related()
delete()
delete_many()
delete_where()
delete_from()
tjoin()
join_related()
date_now()
id()
fk()
inserted_id()
get_copy()
get_clone()
get_relation_fk()
get_model()
dropdown()
enum() // Get values for enum fields..
clean()
safe_select()
query()
table()
fields()
set_table_fields()
field_info()
set_table_name()
table_info()
get_errors()
Is still in dev mode, so advices/new methods implementation are welcome.