All Projects → friedolinfoerder → wp-activerecord

friedolinfoerder / wp-activerecord

Licence: MIT license
An ActiveRecord implementation for WordPress

Programming Languages

PHP
23972 projects - #3 most used programming language

Projects that are alternatives of or similar to wp-activerecord

squint
Search PostgreSQL jsonb and hstore columns
Stars: ✭ 26 (+36.84%)
Mutual labels:  activerecord
workflow-activerecord
ActiveRecord/Rails Integration for the Workflow library
Stars: ✭ 24 (+26.32%)
Mutual labels:  activerecord
rails cursor pagination
Add cursor pagination to your ActiveRecord backed application
Stars: ✭ 21 (+10.53%)
Mutual labels:  activerecord
siphon
Siphon enables you to easily combine your scopes with params
Stars: ✭ 23 (+21.05%)
Mutual labels:  activerecord
ar-role
ActiveRecord behavior, which provides relation roles (table inheritance)
Stars: ✭ 34 (+78.95%)
Mutual labels:  activerecord
ActiveRecord
New Active Record for KumbiaPHP
Stars: ✭ 23 (+21.05%)
Mutual labels:  activerecord
activerecord-cockroachdb-adapter
CockroachDB adapter for ActiveRecord.
Stars: ✭ 90 (+373.68%)
Mutual labels:  activerecord
ar-dynattribute
Provide ActiveRecord dynamic attributes stored into the single field in serialized state
Stars: ✭ 43 (+126.32%)
Mutual labels:  activerecord
u-observers
Simple and powerful implementation of the observer pattern.
Stars: ✭ 31 (+63.16%)
Mutual labels:  activerecord
rails async migrations
Asynchronous support for ActiveRecord::Migration
Stars: ✭ 56 (+194.74%)
Mutual labels:  activerecord
active record distinct on
Support for `DISTINCT ON` statements when querying with ActiveRecord
Stars: ✭ 23 (+21.05%)
Mutual labels:  activerecord
activerecord-shard for
Database Sharding Library for ActiveRecord
Stars: ✭ 16 (-15.79%)
Mutual labels:  activerecord
AlamoRecord
An elegant yet powerful iOS networking layer inspired by ActiveRecord.
Stars: ✭ 18 (-5.26%)
Mutual labels:  activerecord
activeentity
Active Record without Database
Stars: ✭ 46 (+142.11%)
Mutual labels:  activerecord
zen-query
parascope gem for param-based scope generation
Stars: ✭ 25 (+31.58%)
Mutual labels:  activerecord
scopy
Common ActiveRecord scopes as model concerns
Stars: ✭ 13 (-31.58%)
Mutual labels:  activerecord
ar-variation
Variation behavior for ActiveRecord
Stars: ✭ 46 (+142.11%)
Mutual labels:  activerecord
models stats
Charts for your rails models with MetricsGraphics.js and NVD3
Stars: ✭ 43 (+126.32%)
Mutual labels:  activerecord
mv-core
Migration Validators project core classes
Stars: ✭ 23 (+21.05%)
Mutual labels:  activerecord
defaults
Add default value for ActiveRecord attributes
Stars: ✭ 16 (-15.79%)
Mutual labels:  activerecord

WordPress ActiveRecord

WordPress ActiveRecord implements the active record pattern to easily retrieve, update and delete rows of database tables without struggling with raw SQL query strings. The goal of this library is to provide a small but yet powerful ORM for the CMS WordPress, which should be easy to implement. Therefore it only consists of two classes: ActiveRecord and Query:

  • The ActiveRecord class maps rows to object instances and the columns to object properties.
  • The Query class provides a fluent interface to create sql queries.

Installation

composer require friedolinfoerder/wp-activerecord

Usage

You can use the library in your plugin or directly in your functions.php file. All you have to do is to require the ActiveRecord class and define your model classes (e.g. Slideshow):

// create a model class for the table {wp-prefix}slideshows 
class Slideshow extends \wp_activerecord\ActiveRecord {
    protected static $table_name = 'slideshows';
}

With this you can create new rows, update and save them like this:

// create new row
$slideshow = Slideshow::create([
    'title'        => 'Header slideshow',
    'slide_time'   => 3000,
    'slide_effect' => 'fade'
]);

// retrieve by id...
$slideshow = Slideshow::get(1);

// ... and update the row
$slideshow->title = 'New title';
$slideshow->slide_effect = 'slide';
$slideshow->save();

API

Class ActiveRecord

Static Properties

Property $casts

Cast row values to native types.

Example:
class Slideshow extends \wp_activerecord\ActiveRecord {
    protected static $casts = [
        'num_slides' => 'int',
        'duration' => 'float',
        'active' => 'boolean',
        'created_at' => 'datetime',
    ];
}

Static Methods

Method create([$attributes])

Create a model with an array of attributes

Example:
$activeRecord = Table::create();
// or
$activeRecord = Table::create([
   'name'  => 'wp-activerecord',
   'title' => 'WordPress ActiveRecord'
]);
Method delete_by_id($id)

Delete a row by id

Example:
Table::delete_by_id(3);
Method get([$id])

Get all model instances or a model instance by id

Example:
$activeRecords = Table::get(); // all records
$activeRecord = Table::get(3); // one record by id
Method get_{type}_by_{column}($value [, $...])

Dynmamic finder method: Get a var, rows, results or model instances

Example:
$activeRecord = Table::get_one_by_title('WordPress');
$array = Table::get_by_name_or_title('wp-activerecord', 'WP');
$row = Table::get_row_by_name_and_title('wp', 'WP');
$var = Table::get_var_name_by_id(3);
Method get_table_name()

Get the table name

Example:
$table_name = Table::get_table_name();
Method insert($data)

Insert one or multiple rows into the database

Example:
$last_insert_id = Table::insert([
   'name'  => 'wp-activerecord',
   'title' => 'WordPress ActiveRecord'
]);
// or
$last_insert_id = Table::insert([[
   'name'  => 'ActiveRecord',
   'title' => 'Class ActiveRecord'
], [
   'name'  => 'Query',
   'title' => 'Class Query'
]]);
Method query()

Get a query instance

Example:
$query = Table::query();
Method update($column [, $value])

Shortcut method for creating a query instance and calling update on it

Example:
$query = Table::update('name', 'wp-activerecord-updated');
// or
$query = Table::update([
   'name'  => 'wp-activerecord-updated',
   'title' => 'Updated WordPress ActiveRecord'
]);
Method wpdb()

Get the wpdb instance

Example:
$wpdb = Table::wpdb();

// use case:
$userInput = '20%';
Table::query()
  ->delete()
  ->where('name', 'like', '%' . Table::wpdb()->esc_like($userInput) . '%')
  ->execute();

Instance methods

Method delete()

Delete the model

Example:
$activeRecord->delete();
Method save()

Save the model

Example:
$activeRecord->save();

Event methods

Method save_pre($isNew)

Called before saving the model

Example:
// in your derived class:
protected function save_pre($isNew) {
    $this->new = $isNew ? 1 : 0;
}
Method save_post($isNew)

Called after saving the model

Example:
// in your derived class:
protected function save_post($isNew) {
    // do something with $this
}
Method delete_pre()

Called before deleting the model

Example:
// in your derived class:
protected function delete_pre() {
    // do something with $this
}
Method delete_post()

Called after deleting the model

Example:
// in your derived class:
protected function delete_post() {
    // do something with $this
}

Class Query

Static Methods

Method wpdb()

Get the wpdb instance

Example:
$wpdb = Query::wpdb();

Instance Methods

Select rows

Method select([$...])
Example:
$activeRecord = Table::query()
  ->select('id', 'name')
  ->get();
Method delete()

Delete rows

Example:
Table::query()
  ->delete()
  ->where('name', 'wp')
  ->execute();
Method update([$column [, $value]])

Update rows (Alias for \wp_activerecord\Query::set)

Example:
Table::query()
  ->update()
  ->set('name', 'wp')
  ->execute();
// or
Table::query()
  ->update('name', 'wp')
  ->execute();
// or
Table::query()
  ->update([
    'name'  => 'wp',
    'title' => 'WordPress'
  ])
  ->execute();
Method set($column [, $value])

Set columns, which should be updated

Example:
Table::query()
  ->set('name', 'wp')
  ->execute();
// or
Table::query()
  ->set([
    'name'  => 'wp',
    'title' => 'WordPress'
  ])
  ->execute();
Method insert($data)

Insert rows

Example:
Table::query()
  ->insert([
    'name'  => 'wp',
    'title' => 'WordPress'
  ])
  ->execute();
// or
Table::query
  ->insert([[
    'name'  => 'ActiveRecord',
    'title' => 'Class ActiveRecord'
  ], [
    'name'  => 'Query',
    'title' => 'Class Query'
  ]])
  ->execute();
Method where($column [, $type_or_value [, $value]])

Add a where condition

Example:
$activeRecords = Table::query()
  ->where('name', 'wp')
  ->where('title', 'LIKE', '%active%')
  ->where([
    'start' => 12,
    'end'   => 37
  ])
  ->where(['deleted_at', null]) // query for NULL value, produces  `deleted_at` IS NULL
  ->where('value', '>', ['RAND()']) // raw value wrapped in array
  ->where('numbers', 'in', [[1, 2, 3]] // a array as raw value will be joined
  ->get();
Method and_where($column [, $type_or_value [, $value]])

Alias for where.

Method or_where($column [, $type_or_value [, $value]])

Alias for where, but adds a new group to the where clause, which will be added with the keyword OR

Method group_by($column [, $order])

Add a group by section

Example:
$activeRecords = Table::query()
  ->group_by('name', 'asc')
  ->get();
Method having($column [, $type_or_value [, $value]])

Add a having condition

Example:
$activeRecords = Table::query()
  ->group_by('name')
  ->having(["SUM(price)"], ">", 10) // raw column value wrapped in array
  ->get();
Method and_having($column [, $type_or_value [, $value]])

Alias for having.

Method or_having($column [, $type_or_value [, $value]])

Alias for having, but adds a new group to the having clause, which will be added with the keyword OR

Method order_by($column [, $order])

Add a order by section

Example:
$activeRecords = Table::query()
  ->order_by('description')
  ->order_by('name', 'desc')
  ->get();
Method limit($limit)

Add a limit

Example:
$activeRecords = Table::query()
  ->limit(5)
  ->get();
Method offset($offset)

Add a offset

Example:
$activeRecords = Table::query()
  ->offset(10)
  ->get();
Method join($table, $attribute, $foreign_attribute [, $type])

Add a join condition

Example:
$activeRecords = Table::query()
  ->join('OtherTable', 'id', 'table_id')
  ->get();
Method sql()

Create the final sql statement

Example:
$sql = Table::query()
  ->select('description')
  ->where('description', 'like', 'Title: %')
  ->sql();
Method get_results()

Get the results of the query

Example:
$results = Table::query()
  ->get_results();
Method get_row()

Get the row of the query

Example:
$row = Table::query()
  ->where('name', 'this is a unique name')
  ->get_row();
Method get_col()

Get the column of the query

Example:
$descriptions = Table::query()
  ->select('description')
  ->get_col();
Method get_var()

Get the value of the query

Example:
$description = Table::query()
  ->select('description')
  ->where('name', 'this is a unique name')
  ->get_var();
Method get()

Get the results of the query as an array of model instances

Example:
$activeRecords = Table::query()
  ->get();
Method get_one()

Get the results of the query as a model instances

Example:
$activeRecord = Table::query()
  ->where('name', 'this is a unique name')
  ->get_one();
Method execute()

Execute the query

Example:
Table::query()
  ->delete()
  ->where('name', 'this is a unique name')
  ->execute();

License

This code is licensed under the MIT license.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].