Sometimes you want to refer to a bean using a different name. For instance, when you have a course referring to a teacher and a student, both of which are people. In this case you can use fetchAs:
$c = R::dispense( 'course' );
//At assignment time, no difference...
$c->teacher = R::dispense( 'person' );
$c->student = R::dispense( 'person' );
$id = R::store( $c );
$c = R::load( 'course', $id );
//when accessing the aliased properties,
//tell RedBeanPHP how to find the bean:
$teacher = $c->fetchAs( 'person' )->teacher;
fetchAs tells RedBeanPHP the ID has to be associated with a different type (in this case 'person' instead of 'teacher' or 'student'). This also works the other way:
//returns all courses for this person
//where he/she is the teacher.
$person->alias( 'teacher' )->ownCourseList;
From a relational point of view, we have exactly two people
for every row (although one or both can be NULL of course). This is why
we call these 'aliases' one-to-X relations
(or one-to-fixed relations), where X is a fixed number.
You can use as many of these 'aliases' as you like.
As of 4.2 RedBeanPHP supports automatic resolve, this means you can use $course->teacher without fetchAs. Autoresolve also works with R::dup() and R::export(). To use automatic resolvement of aliased parent beans, use R::setAutoResolve( TRUE ).
As of 4.2 you can use global aliases. Instead of specifying the alias with fetchAs each time you can specify the alias using R::aliases( ...aliases... );
Also learn about Many-to-many relations.
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.