Red.git | t/ | 54-hand-made-many-to-many.rakutest
use Test;
use Red:api<2>;
model AABB { ... }
model BB { ... }
model AA is table<aa> {
has $.aa-id is serial;
has $.aa-name is column;
has AABB @.aa-bb is relationship{ .aa-id };
method bb1 () {
@!aa-bb.join-model: BB, *.bb-id == *.bb-id
}
method bb2 () {
BB.^all.grep({
.bb-id in @!aa-bb.map(*.bb-id)
})
}
}
model BB is table<bb> {
has $.bb-id is serial;
has $.bb-name is column;
}
model AABB is table<aabb> {
has UInt $.aa-id is column{
:id
:references(*.aa-id),
:model-name<AA>,
};
has UInt $.bb-id is column{
:id,
:references(*.bb-id),
:model-name<BB>,
};
}
my $*RED-FALLBACK = $_ with %*ENV<RED_FALLBACK>;
my $*RED-DEBUG = $_ with %*ENV<RED_DEBUG>;
my $*RED-DEBUG-RESPONSE = $_ with %*ENV<RED_DEBUG_RESPONSE>;
my $*RED-DEBUG-AST = $_ with %*ENV<RED_DEBUG_AST>;
my @conf = (%*ENV<RED_DATABASE> // "SQLite").split(" ");
my $driver = @conf.shift;
my $*RED-DB = database $driver, |%( @conf.map: { do given .split: "=" { .[0] => val .[1] } } );
schema(AA, BB, AABB).drop.create;
my $aa1 = AA.^create: :aa-name<aa1>;
my $bb1 = BB.^create: :bb-name<bb1>;
AABB.^create: :aa-id($aa1.aa-id), :bb-id($bb1.bb-id);
lives-ok {
is $aa1.bb1.map(*.bb-name).Seq, < bb1 >;
}
lives-ok {
is $aa1.bb2.map(*.bb-name).Seq, < bb1 >;
}
#.say for $aa1.bb1.map: *.bb-name;
done-testing;