2020-02-04

Craft 3.4 Changelog:関連づけられているエントリが取り出しやすくなった #craftcms

Craft 3.4 の Changelog を見てみるシリーズ。

It’s now possible to filter element query results by their related elements using relational fields’ element query params (e.g. publisher(100) rather than relatedTo({targetElement: 100, field: 'publisher'})). (#5200)

と気になる記述があったので試してみる。

何度 @BUN @tinybeans に教えてもらっても理解できない relatedTo。

該当の Issue がこちら。

FR: GraphQL support for more advanced relatedTo parameters · Issue #5200 · craftcms/cms
https://github.com/craftcms/cm...

検証用のセクション・エントリの準備

こんな感じで関連付け用のセクション・エントリを用意する。

エントリ側で上記エントリのリレーション用のフィールドを設定して、以下のように関連づける。

関連付けが複数見れるのはほんとありがたい。

関連づけられたエントリーとか取り出すのはいまいち慣れていなくてこれが以前からできたのかどうかすら怪しいところはあるが。

テンプレートで関連づけられているエントリを取り出す

select3 が関連づけられているエントリは

entries = craft.entries.section("article").samplerelateion([50]).all()

 で取り出すことができる。

複数を対象にすると

entries = craft.entries.section("article").samplerelateion([46,50]).all()

で、 select2, select3 のどちらかが関連づけられているエントリが取り出せる。

and については

entries = craft.entries.section("article").samplerelateion(['and',46,50]).all()

で取り出すことができる。

リレーション周りのエントリの取り出しがだいぶ楽にできるようになった気がする!
(relatedTo を理解できればいい話なんだろうが・・)

GraphQL 対応からはじまった改善らしい。

{
  entries (eventLocation: [3896], eventType: [3858, 3863]) {
    title   
  }
}

@BUN に聞くとまだ relatedTo は必要な場合があるような感じみたいだが、その時はまた質問することになりそうだ。。。m(_ _)m