Skip to content

Select options

The #[SelectOption] attribute describes a model as a type-ahead source, separate from the filter and policy search flow. Where a full search ranks results by a combined score, select options are meant for a dropdown: a substring match over a small set of columns, ordered and limited for a picker component.

Declaring select options

#[SelectOption] is declared once per model:

php
use Raxos\Database\Orm\Attribute\{Column, PrimaryKey, Table};
use Raxos\Database\Orm\Model;
use Raxos\Search\Attribute\SelectOption;

#[Table('users')]
#[SelectOption(
    searchKeys: ['name', 'email'],
    order: 'name',
    descending: false,
    limit: 25,
    emptyLimit: 10
)]
final class User extends Model
{
    #[PrimaryKey]
    #[Column]
    public int $id;

    #[Column]
    public string $name;

    #[Column]
    public string $email;
}

Options

ParameterTypeDefaultMeaning
searchKeysstring[]-Columns matched with a substring LIKE search.
order?stringnullOrder-by column. Defaults to the first search key.
descendingboolfalseWhether to order descending.
limitint25Maximum number of results when a search term is present.
emptyLimit?intnullMaximum results with no search term. Defaults to limit.

The searchKeys are matched with a substring LIKE search, which suits type-ahead dropdowns rather than ranked search. When order is null it falls back to the first search key, and when emptyLimit is null it falls back to limit.

Configuration only

The attribute only carries configuration. Reading it with reflection and building the query from it is left to the application, so you decide how the type-ahead endpoint uses the search keys, ordering and limits. This keeps select options independent of the filter and policy pipeline that SearchProvider drives.