3

私はplay2.0フレームワークを使用してウェブサイトを書いています。また、結果を解析するときに問題が発生します。mysql dbへのこのリクエストは、エピソードとアニメに関するすべての情報とともに、エピソードごとにデータベースに追加されたすべてのリンク(エピソードごとに複数の場合があります)を取得します。

  def lastReleasedLink(limit:Long=5):List[(((Episode,Anime),Link),Genre)] = {
    DB.withConnection { implicit c =>
      SQL(
        """
          select * from yas_episodes as a
          inner join anime as b on a.ep_anime_id=b.id
          left outer join yas_links as c on a.ep_id=c.ep_id
          LEFT JOIN yas_animes_genres AS d ON a.ep_anime_id = d.ag_anime_id
          INNER JOIN yas_genres AS e ON e.g_id = d.ag_genre_id
          where c.ep_id IS NOT NULL group by c.ep_id order by c.date desc limit {limit}
        """).on('limit ->limit)as(Episode.simple~Anime.simple~Link.simple~Genre.simple map{
        case episode~anime~link~genre => episode -> anime -> link -> Genre
      } *)
    }
  }

戻り値はのタイプですが、ジャンルをどこに置くかわからない、またはわからないList[(((Episode,Anime),Link),Genre)] というリストへの出力をどのように形成できます か。List[episode,anime,Seq[links]]List[episode,anime,Seq[Genres],Seq[links]]

1つのエピソードごとに2つのリンクがある場合、テーブルアニメとyas_episodesからの情報がすべての行にコピーされることを想像できます。だから私はどういうわけかエピソードレコードごとにそれらを一緒に(グループ化して)積み重ねる必要があります。その後、リストを繰り返し、すべてのオブジェクトにアクセスできるようになります。

ご覧のとおり、リクエストにはアニメとジャンルの多対多の関係があります。ビューでアクセスできるように、すべてを1つのリストにまとめる方法がわかりません。ジャンルはアニメモデルの一部である必要がありますか?

4

1 に答える 1

2

これを実現するための好ましい方法は、ScalaコレクションAPIを使用することのようです。GuillaumeBortによるこの投稿を参照してください。

あなたの場合、私はあなたが次のようなことをすることができると思います

lastReleasedLink groupBy { case (((e, a), l), g) => (e, a) }

(エピソード、アニメ)でグループ化する。一般的に言って、関数を変更してを返すようにすると、これらの操作はおそらく少し簡単になりますList[(Episode, Anime, Link, Genre)]

case episode~anime~link~genre => (episode, anime, link, genre)

次に、このコードで同じことを達成できます。

lastReleasedLink groupBy ((_._1, _._2))
于 2012-11-07T08:22:24.093 に答える