2つのテーブル間の結合は次のように行われます
(for {
(computer, company) <- Computers leftJoin Companies on (_.companyId === _.id)
if computer.name.toLowerCase like filter.toLowerCase()
}
しかし、より多くのテーブル間で結合が必要な場合は、以下を試してみてもうまくいかない正しい方法は何ですか?
(for {
(computer, company,suppliers) <- Computers leftJoin Companies on (_.companyId === _.id)
//not right leftjoin Suppliers on (_.suppId === _.id)
if computer.name.toLowerCase like filter.toLowerCase()
}
最初の結合により、クエリはタプルを返します。タプルコンポーネントの1つに、2番目の結合に使用する外部キーがあります。フィールドを取得する前に、このコンポーネントを2番目の結合条件で取得する必要があります。 Companiesがテーブルで、フィールドsuppIdがある場合、次のようになります。
(for {
((computer, company),suppliers) <- Computers leftJoin Companies on (_.companyId === _.id) leftJoin Suppliers on (_._2.suppId === _.id)
if computer.name.toLowerCase like filter.toLowerCase()
} yield ... )
私はあなたがこれが欲しいと思います:
for {
(computer, company) <- Computers leftJoin Companies on (_.companyId === _.id)
(supp, _) <- company innerJoin Suppliers on (_.suppId === _.id)
if computer.name.toLowerCase like filter.toLowerCase()
} yield (computer, company, supp)
もちろん、私はあなたのモデルについて仮定しています。サプライヤーが企業またはコンピューターとリンクしているかどうかはわかりません。