Eloquent ORM for WordPress
This is a library package to use Laravel's Eloquent ORM with WordPress.
To install this package, edit your
composer.jsonfile:
{ "require": { "tareq1988/wp-eloquent": "dev-master" } }
Now run:
$ composer install
$db = \WeDevs\ORM\Eloquent\Database::instance();var_dump( $db->table('users')->find(1) ); var_dump( $db->select('SELECT * FROM wp_users WHERE id = ?', [1]) ); var_dump( $db->table('users')->where('user_login', 'john')->first() );
// OR with DB facade use \WeDevs\ORM\Eloquent\Facades\DB;
var_dump( DB::table('users')->find(1) ); var_dump( DB::select('SELECT * FROM wp_users WHERE id = ?', [1]) ); var_dump( DB::table('users')->where('user_login', 'john')->first() );
You can use custom tables of the WordPress databases to create models:
use WeDevs\ORM\Eloquent\Model;class CustomTableModel extends Model {
/** * Name for table without prefix * * @var string */ protected $table = 'table_name'; /** * Columns that can be edited - IE not primary key or timestamps if being used */ protected $fillable = [ 'city', 'state', 'country' ]; /** * Disable created_at and update_at columns, unless you have those. */ public $timestamps = false; /** Everything below this is best done in an abstract class that custom tables extend */ /** * Set primary key as ID, because WordPress * * @var string */ protected $primaryKey = 'ID'; /** * Make ID guarded -- without this ID doesn't save. * * @var string */ protected $guarded = [ 'ID' ]; /** * Overide parent method to make sure prefixing is correct. * * @return string */ public function getTable() { // In this example, it's set, but this is better in an abstract class if ( isset( $this->table ) ){ $prefix = $this->getConnection()->db->prefix; return $prefix . $this->table; } return parent::getTable(); }
}
$users = $db->table('users')->get();foreach ($users as $user) { var_dump($user->display_name); }
Here
usersis the table name without prefix. The prefix will be applied automatically.
use \WeDevs\ORM\Eloquent\Model as Model;class Employee extends Model {
}
var_dump( Employee::all()->toArray() ); // gets all employees var_dump( Employee::find(1) ); // find employee with ID 1
The class name
Employeewill be translated into
PREFIX_employeestable to run queries. But as usual, you can override the table name.
use WeDevs\ORM\WP\Post as Post;var_dump( Post::all() ); //returns only posts with WordPress post_type "post"
Postby
post_statusand
post_type
use WeDevs\ORM\WP\Post as Post; var_dump(Post::type('page')->get()->toArray()); // get pages var_dump(Post::status('publish')->get()->toArray()); // get posts with publish status var_dump(Post::type('page')->status('publish')->get()->toArray()); // get pages with publish status
debug-baror
query-monitorto get SQL query reporting.