SQL / Doctrine: возможно ли получить этот результат, используя group by? - PullRequest
0 голосов
/ 31 января 2020

Я, честно говоря, не так хорош с группой в SQL. У меня есть две сущности 1) Блоки 2) Наборы.

Каждый блок содержит много наборов. В моей таблице это отображается с помощью ManyToOne в наборах. Каждый набор имеет столбец с именем «блок», который ссылается на идентификатор блока. Просто.

Однако, когда я пытаюсь получить все блоки или все наборы, я получаю, конечно, массив, подобный этому: (я специально сделал укороченные массивы для удобства чтения)

для наборов:

array:34 [▼
  0 => Sets {#833 ▼
    -id: 1
    -name: "Alpha"
    -year: "1993-08"
    -icon: "000"
    -block: Blocks {#836 ▶}
  }
  1 => Sets {#838 ▼
    -id: 2
    -name: "Arabian Nights"
    -year: "1993-12"
    -icon: "003"
    -block: Blocks {#836 ▶}
  }
  2 => Sets {#839 ▶}
  3 => Sets {#841 ▶}
  4 => Sets {#842 ▶}
  5 => Sets {#844 ▶}
]

и для блоков:

array:27 [▼
  0 => Blocks {#836 ▶}
  1 => Blocks {#840 ▼
    -id: 2
    -name: "Ice Age"
    -year: "1995"
    -description: "The Ice Age block is the first block of sets, consisting of the large expansion Ice Age in June 1995 and two small expansions, Alliances in June 1996 and Coldsn ▶"
  }
  2 => Blocks {#843 ▼
    -id: 3
    -name: "Mirage"
    -year: "1996"
    -description: "The Mirage block is the second block of sets, consisting of the large expansion Mirage followed by two small expansions, Visions and Weatherlight. The block cam ▶"
  }
  3 => Blocks {#846 ▼
    -id: 4
    -name: "Tempest"
    -year: "1997"
    -description: """
      Tempest block, officially called the Rath Cycle, is the third Magic block, spanning 1997–1998. It encompasses three sets: the large expansion Tempest and the tw ▶



      The keywords introduced in this block were buyback and shadow. Three creature types (Licids, Slivers, and Spikes) also debuted here. 
      """
  }
  4 => Blocks {#849 ▶}
  5 => Blocks {#852 ▶}
  6 => Blocks {#855 ▶}
  7 => Blocks {#858 ▶}
]

Но массив, который я хочу получить , это:

Массив всех блоков и их соответствующих наборов внутри.

array:16 [▼
  0 => array:3 [▼
    "name" => "Outside Block"
    "year" => "199X"
    "content" => array:2 [▼
      0 => array:2 [▼
        "name" => "Alpha"
        "icon" => "000"
      ]
      1 => array:2 [▼
        "name" => "Arabian Nights"
        "icon" => "003"
      ]
    ]
  ]
  1 => array:3 [▶]
  2 => array:3 [▶]
  3 => array:3 [▶]
]

Как видите, мне удалось это сделать используя циклы внутри моего PHP кода. Но мне интересно, это невозможно сделать с помощью SQL? Можно ли создать массив с помощью group by, чтобы получить все блоки в столбце дифференциалов и содержащие их наборы в каждой строке?

...