Labels, Enums, Tags
Labels, Enums and Tags are all based on very simple beans. These beans only have an id, a type and a name. While they might look simple, these beans can offer various powerful services in your applications. Labels form the basis for enums and tags. Enums are in fact labels in a one-to-many relation while Tags are labels in a many-to-many relation.
A Label is a bean with just a name property. You can generate a batch of labels of a certain type using:
$labels = R::dispenseLabels( 'meals', ['pizza', 'pasta'] );
This will create two meal objects. Each bean will have a name property that corresponds to one of the strings in array.
You can also collect the strings from label beans using:
$array = R::gatherLabels( $meals );
The gatherLabels() function returns an alphabetically sorted array of strings each containing one name property of a bean in the bean list provided.
An enum type is a special bean that enables for a property to be a set of predefined values. To use an ENUM:
$tea->flavour = R::enum( 'flavour:english' );
The ENUM method will do a lot of work here. First it checks whether there exists a 'flavour' bean with the name 'ENGLISH'. If this is the case, enum() will return this bean, otherwise it will create such a bean, store it in the database and return it. This way your ENUMs are created on the fly - properly. To compare an enum value:
$tea->flavour->equals( R::enum( 'flavour:english' ) );
To get a list of all flavours, just omit the value part:
$flavours = R::enum( 'flavour' );
To get a comma separated list of flavours you might want to combine this method with other Label Maker methods:
implode( ',', R::gatherLabels( R::enum( 'flavour' ) ) );
Since RedBeanPHP enums are beans you can add other properties as well. To query using an enum:
$flowers = R::find( 'flower', ' color_id = ? ', [ R::enum( 'color:red' )->id ] );
The find query above will retrieve all red flowers. While this query is perfectly readable the syntax is a bit clunky, therefore there is a shorthand notation for the R::enum(...)->id part:
$flowers = R::find( 'flower', ' color_id = ? ', [ EID('color:red') ] );
The global function EID() returns the ID of the given ENUM directly.
Tags are often used to categorize or group items. To tag a an item:
R::tag( $page, array( 'topsecret', 'mi6' ) );
To fetch all tags attached to a certain bean we use the same method but without the tag parameter:
$tags = R::tag( $page ); //returns array with tags
To untag an item use:
R::untag( $bean, $tagListArray );
To get all beans that have been tagged with $tags, use tagged():
R::tagged( $beanType, $tagList );
To find out whether beans have been tagged with specific tags, use hasTag():
R::hasTag( $bean, $tags, $all = FALSE )
To add tags without removing the old ones:
R::addTags( $page, ['funny', 'hilarious'] );
To get beans that have ALL these tags:
//must be tagged with both tags
R::taggedAll( $page, ['funny', 'hilarious'] );
Note about comments: this comment section is meant for contributing notes only. Please use the comment section to add advice, tips and insights. For questions please visit the forum. For feature requests or bug reports please visit github.