[Frage] UNION SELECT TYPO3-Version: 8.7.9

  • getit getit
    Jedi-Ritter
    0 x
    137 Beiträge
    4 Hilfreiche Beiträge
    15. 01. 2018, 21:56

    Ich möchte gerne in einem Aufwasch auf zwei Tabellen zugreifen.

    Ich dach das kann ich mit einem UNION SELECT machen:

    1. public function customQuery() {
    2. $query = $this->createQuery();
    3. $query->statement('SELECT uid, null, bezeichnung FROM tx_kkbaybw_domain_model_gebaeude UNION ALL SELECT uid, vorname, nachname FROM tx_kkbaybw_domain_model_ansprechpartner');
    4. return $query->execute();
    5. }

    im setup.ts

    1. KKSoftware\Kkbaybw\Domain\Model\FeSearch {
    2. mapping {
    3. tableName = tx_kkbaybw_domain_model_gebaeude
    4. }
    5. }

    1. <?php
    2.  
    3. namespace KKSoftware\Kkbaybw\Domain\Model;
    4.  
    5. use TYPO3\CMS\Extbase\DomainObject\AbstractEntity;
    6.  
    7. class FeSearch extends AbstractEntity {
    8. /**
    9.   * bezeichnung
    10.   *
    11.   * @var string
    12.   */
    13. protected $bezeichnung = '';
    14.  
    15. /**
    16.   * @var string
    17.   */
    18. protected $vorname = '';
    19.  
    20. /**
    21.   * Returns the bezeichnung
    22.   *
    23.   * @return string $bezeichnung
    24.   */
    25. public function getBezeichnung() {
    26. return $this->bezeichnung;
    27. }
    28.  
    29. /**
    30.   * @return string
    31.   */
    32. public function getVorname() {
    33. return $this->vorname;
    34. }
    35. }

    Wenn ich die customQuery() ausführe bekomme ich eine ResultSet mit der richtigen Anzahl von Einträgen.
    Nur sind die Einträge für den zweiten Teil des UNIONs (SELECT ... ansprechpartner) leer.

    Ausgabe des DebuggerUtility:

    1. TYPO3\CMS\Extbase\...\QueryResult {
    2. 0 => + KKSoftware\Kkbaybw\Domain\Model\FeSearch (uid=1, pid=0)
    3. 1 => + ...FeSearch (uid=2, pid=0)
    4. ...
    5. 17 => KKSoftware\Kkbaybw\Domain\Model\FeSearch 'see above' (uid=1, pid=0)
    6. ...
    7. 21 => ... FeSearch 'see above'(uid=6, pid=0)
    8. }

    Die Schlüssel 0-16 kommen aus dem ersten Teil des UNIONs und sind mit einem '+' markiert - d.h. da ist ein Objekt darunter.
    Die Schlüssel 17-21 kommen aus dem zweiten Teil des UNIONS sind leer.


  • 1
  • getit getit
    Jedi-Ritter
    0 x
    137 Beiträge
    4 Hilfreiche Beiträge
    18. 01. 2018, 09:49

    Ich habs.

    Direkt in der Datenbank (geht nicht über ext_tables.sql) den VIEW erzeugt:
    [code]select (`tx_xxx_domain_model_gebaeude`.`uid` + 100000) AS `uid`,`tx_xxx_domain_model_gebaeude`.`bezeichnung` AS `name`,'' AS `vorname`,'' AS `nachname`,concat(`tx_xxx_domain_model_gebaeude`.`telefon_landvorwahl`,' ',`tx_xxx_domain_model_gebaeude`.`telefon_ortsvorwahl`,' ',`tx_xxx_domain_model_gebaeude`.`telefon_durchwahl`) AS `telefon`,concat(`tx_xxx_domain_model_gebaeude`.`fax_landvorwahl`,' ',`tx_xxx_domain_model_gebaeude`.`fax_ortsvorwahl`,' ',`tx_xxx_domain_model_gebaeude`.`fax_durchwahl`) AS `fax`,'' AS `email`,'' AS `mobile`,'' AS `sprechzeiten_nach_vereinbarung`,'' AS `sprechzeiten_sonderzeiten`,`tx_xxx_domain_model_gebaeude`.`oeffnungszeit_nach_vereinbarung` AS `oeffnungszeit_nach_vereinbarung`,`tx_xxx_domain_model_gebaeude`.`oeffnungszeit_sonderzeiten` AS `oeffnungszeit_sonderzeiten`,concat(`tx_xxx_domain_model_gebaeude`.`oeffnungszeit_mo_von_vormittags`,' - ',`tx_xxx_domain_model_gebaeude`.`oeffnungszeit_mo_bis_vormittags`) AS `oeffnungszeit_mo_vormittags`,concat(`tx_xxx_domain_model_gebaeude`.`oeffnungszeit_mo_von_nachmittags`,' - ',`tx_xxx_domain_model_gebaeude`.`oeffnungszeit_mo_bis_nachmittags`) AS `oeffnungszeit_mo_nachmittags`,concat(`tx_xxx_domain_model_gebaeude`.`oeffnungszeit_di_von_vormittags`,' - ',`tx_xxx_domain_model_gebaeude`.`oeffnungszeit_di_bis_vormittags`) AS `oeffnungszeit_di_vormittags`,concat(`tx_xxx_domain_model_gebaeude`.`oeffnungszeit_di_von_nachmittags`,' - ',`tx_xxx_domain_model_gebaeude`.`oeffnungszeit_di_bis_nachmittags`) AS `oeffnungszeit_di_nachmittags`,concat(`tx_xxx_domain_model_gebaeude`.`oeffnungszeit_mi_von_vormittags`,' -',`tx_xxx_domain_model_gebaeude`.`oeffnungszeit_mi_bis_vormittags`) AS `oeffnungszeit_mi_vormittags`,concat(`tx_xxx_domain_model_gebaeude`.`oeffnungszeit_mi_von_nachmittags`,' - ',`tx_xxx_domain_model_gebaeude`.`oeffnungszeit_mi_bis_nachmittags`) AS `oeffnungszeit_mi_nachmittags`,concat(`tx_xxx_domain_model_gebaeude`.`oeffnungszeit_do_von_vormittags`,' _ ',`tx_xxx_domain_model_gebaeude`.`oeffnungszeit_do_bis_vormittags`) AS `oeffnungszeit_do_vormittags`,concat(`tx_xxx_domain_model_gebaeude`.`oeffnungszeit_do_von_nachmittags`,' - ',`tx_xxx_domain_model_gebaeude`.`oeffnungszeit_do_bis_nachmittags`) AS `oeffnungszeit_do_nachmittags`,concat(`tx_xxx_domain_model_gebaeude`.`oeffnungszeit_fr_von_vormittags`,' - ',`tx_xxx_domain_model_gebaeude`.`oeffnungszeit_fr_bis_vormittags`) AS `oeffnungszeit_fr_vormittags`,concat(`tx_xxx_domain_model_gebaeude`.`oeffnungszeit_fr_von_nachmittags`,' - ',`tx_xxx_domain_model_gebaeude`.`oeffnungszeit_fr_bis_nachmittags`) AS `oeffnungszeit_fr_nachmittags`,'gebaeude' AS `typ`,'' AS `gebaeude`,'' AS `behoerde` from `tx_xxx_domain_model_gebaeude` union all select `tx_xxx_domain_model_ansprechpartner`.`uid` AS `uid`,concat(`tx_xxx_domain_model_ansprechpartner`.`vorname`,' ',`tx_xxx_domain_model_ansprechpartner`.`nachname`) AS `name`,`tx_xxx_domain_model_ansprechpartner`.`vorname` AS `vorname`,`tx_xxx_domain_model_ansprechpartner`.`nachname` AS `nachname`,concat(`tx_xxx_domain_model_ansprechpartner`.`telefon_landvorwahl`,' ',`tx_xxx_domain_model_ansprechpartner`.`telefon_ortsvorwahl`,' ',`tx_xxx_domain_model_ansprechpartner`.`telefon_durchwahl`) AS `telefon`,concat(`tx_xxx_domain_model_ansprechpartner`.`fax_landvorwahl`,' ',`tx_xxx_domain_model_ansprechpartner`.`fax_ortsvorwahl`,' ',`tx_xxx_domain_model_ansprechpartner`.`fax_durchwahl`) AS `fax`,concat(`tx_xxx_domain_model_ansprechpartner`.`mobil_landvorwahl`,' ',`tx_xxx_domain_model_ansprechpartner`.`mobil_ortsvorwahl`,' ',`tx_xxx_domain_model_ansprechpartner`.`mobil_durchwahl`) AS `mobile`,`tx_xxx_domain_model_ansprechpartner`.`email` AS `email`,`tx_xxx_domain_model_ansprechpartner`.`sprechzeiten_nach_vereinbarung` AS `sprechzeiten_nach_vereinbarung`,`tx_xxx_domain_model_ansprechpartner`.`sprechzeiten_sonderzeiten` AS `sprechzeiten_sonderzeiten`,'' AS `oeffnungszeit_nach_vereinbarung`,'' AS `oeffnungszeit_sonderzeiten`,'' AS `oeffnungszeit_mo_vormittags`,'' AS `oeffnungszeit_mo_nachmittags`,'' AS `oeffnungszeit_di_vormittags`,'' AS `oeffnungszeit_di_nachmittags`,'' AS `oeffnungszeit_mi_vormittags`,'' AS `oeffnungszeit_mi_nachmittags`,'' AS `oeffnungszeit_do_vormittags`,'' AS `oeffnungszeit_do_nachmittags`,'' AS `oeffnungszeit_fr_vormittags`,'' AS `oeffnungszeit_fr_nachmittags`,'ansprechpartner' AS `typ`,`tx_xxx_domain_model_ansprechpartner`.`gebaeude_id` AS `gebaeude`,`tx_xxx_domain_model_ansprechpartner`.`ansprechpartner_behoerde` AS `behoerde` from `tx_xxx_domain_model_ansprechpartner`
    [/code]

    Dann habe ich dazu ein Model angelegt:
    [code]<?php

    namespace KKSoftware\XXX\Domain\Model;

    class FeSearch extends BaseModel {

    /**
    * @var string
    */
    protected $name;

    /**
    * @var string
    */
    protected $vorname;

    /**
    * @var string
    */
    protected $nachname;

    /**
    * @var string
    */
    protected $telefon;

    /**
    * @var string
    */
    protected $fax;

    /**
    * @var string
    */
    protected $mobile;

    /**
    * @var int
    */
    protected $sprechzeitenNachVereinbarung;

    /**
    * @var string
    */
    protected $sprechzeitenSonderzeiten;

    /**
    * @var int
    */
    protected $oeffnungszeitNachVereinbarung;

    /**
    * @var string
    */
    protected $oeffnungszeitSonderzeiten;

    /**
    * @var string
    */
    protected $email;

    /**
    * @var string
    */
    protected $oeffnungszeitMoVormittags;

    /**
    * @var string
    */
    protected $oeffnungszeitMoNachmittags;

    /**
    * @var string
    */
    protected $oeffnungszeitDiVormittags;

    /**
    * @var string
    */
    protected $oeffnungszeitDiNachmittags;

    /**
    * @var string
    */
    protected $oeffnungszeitMiVormittags;

    /**
    * @var string
    */
    protected $oeffnungszeitMiNachmittags;

    /**
    * @var string
    */
    protected $oeffnungszeitDoVormittags;

    /**
    * @var string
    */
    protected $oeffnungszeitDoNachmittags;

    /**
    * @var string
    */
    protected $oeffnungszeitFrVormittags;

    /**
    * @var string
    */
    protected $oeffnungszeitFrNachmittags;

    /**
    * @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\KKSoftware\XXX\Domain\Model\Gebaeude>
    */
    protected $gebaeude;

    /**
    * @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\KKSoftware\XXX\Domain\Model\Behoerde>
    */
    protected $behoerde;

    /**
    * @return string
    */
    public function getName() {
    return $this->name;
    }

    /**
    * @return string
    */
    public function getVorname() {
    return $this->vorname;
    }

    /**
    * @return string
    */
    public function getNachname() {
    return $this->nachname;
    }

    /**
    * @return string
    */
    public function getTelefon() {
    return $this->telefon;
    }

    /**
    * @return string
    */
    public function getFax() {
    return $this->fax;
    }

    /**
    * @return string
    */
    public function getMobile() {
    return $this->mobile;
    }

    /**
    * @return string
    */
    public function getEmail() {
    return $this->email;
    }

    /**
    * @return int
    */
    public function getSprechzeitenNachVereinbarung() {
    return $this->sprechzeitenNachVereinbarung;
    }

    /**
    * @return string
    */
    public function getSprechzeitenSonderzeiten() {
    return $this->sprechzeitenSonderzeiten;
    }

    /**
    * @return int
    */
    public function getOeffnungszeitNachVereinbarung() {
    return $this->oeffnungszeitNachVereinbarung;
    }

    /**
    * @return string
    */
    public function getOeffnungszeitSonderzeiten() {
    return $this->oeffnungszeitSonderzeiten;
    }

    /**
    * @return string
    */
    public function getOeffnungszeitMoVormittags() {
    return $this->oeffnungszeitMoVormittags;
    }

    /**
    * @return string
    */
    public function getOeffnungszeitMoNachmittags() {
    return $this->oeffnungszeitMoNachmittags;
    }

    /**
    * @return string
    */
    public function getOeffnungszeitDiVormittags() {
    return $this->oeffnungszeitDiVormittags;
    }

    /**
    * @return string
    */
    public function getOeffnungszeitDiNachmittags() {
    return $this->oeffnungszeitDiNachmittags;
    }

    /**
    * @return string
    */
    public function getOeffnungszeitMiVormittags() {
    return $this->oeffnungszeitMiVormittags;
    }

    /**
    * @return string
    */
    public function getOeffnungszeitMiNachmittags() {
    return $this->oeffnungszeitMiNachmittags;
    }

    /**
    * @return string
    */
    public function getOeffnungszeitDoVormittags() {
    return $this->oeffnungszeitDoVormittags;
    }

    /**
    * @return string
    */
    public function getOeffnungszeitDoNachmittags() {
    return $this->oeffnungszeitDoNachmittags;
    }

    /**
    * @return string
    */
    public function getOeffnungszeitFrVormittags() {
    return $this->oeffnungszeitFrVormittags;
    }

    /**
    * @return string
    */
    public function getOeffnungszeitFrNachmittags() {
    return $this->oeffnungszeitFrNachmittags;
    }

    /**
    * @return \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\KKSoftware\XXX\Domain\Model\Gebaeude>
    */
    public function getGebaeude() {
    return $this->gebaeude;
    }

    /**
    * @return \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\KKSoftware\XXX\Domain\Model\Behoerde>
    */
    public function getBehoerde() {
    return $this->behoerde;
    }
    }
    [/code]

    Und ein (leeres) Repository.

    Anschließend kann ich mit
    [code]$feSearchRepository = $this->objectManager->get('KKSoftware\\XXX\\Domain\\Repository\\FeSearchRepository');
    $result = $feSearchRepository->findAll();
    \TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump($result);exit;
    [/code]
    mein VIEW abfragen.

  • pstranghoener pstrangho...
    Die Macht
    0 x
    531 Beiträge
    24 Hilfreiche Beiträge
    29. 01. 2018, 09:55

    Hey,
    cool das du dein Problem alleine gelöst hast. Danke, dass du deine Lösung mit uns geteilt hast.

    Liebe Grüße
    Philipp

  • 1