Skip to content

Getting Started with Models

Models in AvelPress are classes that represent tables in your database. They provide an elegant and simple ActiveRecord implementation for working with your database, following Laravel's Eloquent conventions while being optimized for WordPress.

Introduction

Every model class corresponds to a database table. Models allow you to query, insert, update, and delete records from their corresponding tables using an expressive, fluent syntax.

Creating Models

Using the CLI

The easiest way to create a model is using the AvelPress CLI:

bash
# Basic model
avel make:model User

# Model with fillable attributes and timestamps
avel make:model User --fillable=name,email,status --timestamps

# Model in a specific module
avel make:model User --module=Auth --fillable=name,email --timestamps

# Model with custom table name and prefix
avel make:model User --table=wp_custom_users --prefix=custom_ --fillable=name,email

The CLI will automatically:

  • Create the model file with proper namespace
  • Set up fillable attributes if provided
  • Enable timestamps if specified
  • Add table prefix if specified
  • Use proper WordPress coding standards
  • Place the model in the correct directory structure

Manual Model Creation

You can also create models manually by extending the base Model class:

php
<?php

namespace App\Models;

use AvelPress\Database\Eloquent\Model;

defined( 'ABSPATH' ) || exit;

class User extends Model {
    protected $table = 'users';
    protected $primaryKey = 'id';
    public $timestamps = true;

    protected $fillable = [
        'name',
        'email',
        'status',
    ];

    protected $hidden = [
        'password',
        'remember_token',
    ];
}

Basic Model Configuration

Table Names

By convention, models use the pluralized, snake_case version of the class name as the table name:

php
class User extends Model
{
    // Uses table: users (auto-generated)
}

class ProductCategory extends Model
{
    // Uses table: product_categories (auto-generated)
}

// Custom table name
class User extends Model
{
    protected $table = 'custom_users';
}

Table Prefix

If your tables use a custom prefix, you can specify it:

php
class User extends Model
{
    protected $prefix = 'custom_';
}

Primary Keys

Models assume the primary key is named id and is an auto-incrementing integer:

php
class User extends Model
{
    // Custom primary key
    protected $primaryKey = 'user_id';

    // Non-incrementing primary key
    public $incrementing = false;

    // String primary key
    protected $keyType = 'string';
}

Timestamps

Enable automatic timestamp management:

php
class User extends Model
{
    public $timestamps = true;
    // Automatically manages created_at and updated_at
}

// Custom timestamp columns
class User extends Model
{
    public $timestamps = true;
    protected $createdAtColumn = 'created_on';
    protected $updatedAtColumn = 'modified_on';
}

Next Steps

Released under the MIT License.