3
私たちのMySQLデータベースでは、third_party_accounts
というテーブルとhas_many
third_party_campaigns
というテーブルがあります。ただし、すべてのアカウントにキャンペーンがあるわけではありません。 DBIx::Class
で何をしたいのですか?1つ以上のキャンペーンを持つアカウントのみを選択します。最も単純には私が見つけたました、次のとおりです。関連するデータベース列の場合DBIx :: Class:0より大きいhas_manyの結果を選択してください
my $third_party_account_rs = $schema->resultset('ThirdPartyAccount');
my $with_campaigns_rs = $third_party_account_rs->search(
{ third_party_account_id => \'IS NOT NULL' },
{
join => 'third_party_campaigns',
group_by => 'me.id',
}
);
:
mysql> select id from third_party_accounts;
+----+
| id |
+----+
| 1 |
| 2 |
| 3 |
+----+
3 rows in set (0.00 sec)
mysql> select id, third_party_account_id from third_party_campaigns;
+----+------------------------+
| id | third_party_account_id |
+----+------------------------+
| 1 | 1 |
| 2 | 2 |
| 3 | 1 |
+----+------------------------+
3 rows in set (0.00 sec)
これは私が行うための簡単な方法があります確信している、このような明白なユースケースのように思えますしかし、私はそれを見つけることができません。
これはすでに私には示唆されていますが、動作しません。私の元のクエリでは、私は 'group_by =>" me.id "を持っていたことに注意してください。これは 'ThirdPartyAccount'レコードの重複を防ぎます。上記のデータを持つこの「逆の」解決法は、idが1の2つの 'ThirdPartyAccount'オブジェクトを私に残すでしょう。 – Ovid
返り値が重複しないようにするには、' - > search_relatedに '{distinct => 1} '呼び出し。 – ilmari