# Pastebin JuWHQ0x7 ➜ Red git:(master) ✗ raku -I. -MRed -e ' model Bli {...} model Bla { has $!id is serial; has $.a is column; has @.bles is relationship( *.bla-id, :model); method blis { self.bles.join-model(Bli, *.bli-id == *.id) } } model Ble { has $.bla-id is column{ :id, :references{ .id }, :model-name }; has $.bli-id is column{ :id, :references{ .id }, :model-name }; } model Bli { has $!id is serial; has $.i is column; has @.bles is relationship( *.ble-id, :model); method blas { self.bles.join-model(Bla, *.bla-id == *.id) } } red-defaults "SQLite"; schema(Bla, Ble, Bli).create; Bla.^create: :a; Bli.^create: :i; Ble.^create: :1bla-id, :1bli-id; my $*RED-DEBUG = True; .say for Bla.^load(1).blis ' SQL : SELECT bla.id , bla.a FROM bla WHERE bla.id = 1 LIMIT 1 BIND: [] SQL : SELECT bli_1.id , bli_1.i FROM ble INNER JOIN bli as bli_1 ON ble.bli_id = bli_1.id WHERE ble.bla_id = ? BIND: [1] Bli.new(i => "bli1")