Ergebnis 1 bis 9 von 9

Thema: Fatal Error: Column "type" ambiguous

  1. #1
    Contao-Nutzer
    Registriert seit
    24.02.2010.
    Beiträge
    64

    Standard Fatal Error: Column "type" ambiguous

    Hallo alle,

    ich meld mich nochmal aus den Wirren und der Mühsal eines Upgrades Contao 3.01 > 3.3 > 3.5.17.

    Mit installierter changelanguage-Erweiterung steigt das Frontend (und auch das Backend, und zwar immer dann, wenn man in der Seitenstruktur die "Seite in Hauptsprache" ändern will,
    also tl_page.languageMain) mit einem fatalen Fehler aus, und zwar:

    Uncaught exception 'Exception' with message 'Query error: Column 'type' in where clause is ambiguous

    Die SELECT-Clause aus dem Errortrace ist sehr lang, ich kürze mal ab:

    SELECT tl_page.*, j1.id AS cCJumpTo__id, j1.pid AS cCJumpTo__pid, j1.sorting AS cCJumpTo__sorting, ...

    und dann kommt

    WHERE type='root' AND fallback='1' AND languageRoot=0 AND (
    dns='mydomain.de'
    OR dns in (SELECT dns FROM tl_page WHERE type='root' AND fallback='1' AND id IN (SELECT languageRoot FROM tl_page WHERE type='root' AND fallback='1' AND dns='mydomain.de'))
    OR dns IN (SELECT dns FROM tl_page WHERE type='root' AND fallback='1' AND languageRoot IN (SELECT id FROM tl_page WHERE type='root' AND fallback='1' AND dns='mydomain.de'))
    ) LIMIT 0,1)

    Ich hatte bei dem System ursprünglich Fremddomains (tl_page.languageRoot) für die Sprachen benutzt, hab das aber gelöscht -- in der Datenbank haben alle Seiten languageRoot=0.

    Ohne changelanguage funktioniert die Website, Frontend und Backend.

    Der Trace aus der Datenbankabfrage sieht irgendwie rekursiv aus. Hat jemand eine Idee? Ich könnte alle Inhalte löschen, aber vielleicht lässt es sich auch ohne das lösen.

    Danke sehr,
    Felix

  2. #2
    Contao-Urgestein Avatar von Toflar
    Registriert seit
    15.06.2009.
    Beiträge
    4.467
    Partner-ID
    8667
    User beschenken
    Wunschliste

    Standard

    Kannst du bitte mal schauen, ob es was hilft, wenn du die "PageFinder.php" im Modul so veränderst:

    Stelle: https://github.com/terminal42/contao...Finder.php#L74

    Alt:

    PHP-Code:
    $columns = [
                
    "type='root'",
                
    "fallback='1'",
                
    'languageRoot=0',
                
    "( 
    Neu:

    PHP-Code:
    $t = \PageModel::getTable();

    $columns = [
                
    "$t.type='root'",
                
    "$t.fallback='1'",
                
    "$t.languageRoot=0",
                
    "( 
    Contao Core-Entwickler @terminal42 gmbh
    Wir sind Contao Premium-Partner!
    Für Individuallösungen kannst du uns gerne kontaktieren.
    PS: Heute schon getrakked?

  3. #3
    Contao-Nutzer
    Registriert seit
    24.02.2010.
    Beiträge
    64

    Standard

    Hallo Toflar,

    die Codeänderung (in findMasterRootForPage) verändert nichts an der Fehlermeldung:

    Query error: Column 'type' in where clause is ambiguous

    Die WHERE-Clause aus dem Errortrace sieht jetzt etwas anders aus:

    Code:
    WHERE type='root' AND ( 
                    dns='x.y.z' 
                    OR dns IN (
                        SELECT dns 
                        FROM tl_page 
                        WHERE type='root' AND fallback='1' AND id IN (
                            SELECT languageRoot FROM tl_page WHERE type='root' AND fallback='1' AND dns='x.y.z'
                        )
                    ) 
                    OR dns IN (
                        SELECT dns 
                        FROM tl_page 
                        WHERE type='root' AND fallback='1' AND languageRoot IN (
                            SELECT id FROM tl_page WHERE type='root' AND fallback='1' AND dns='x.y.z'
                        )
                    )
                ) AND published='1' AND (start='' OR start<1475482800) AND (stop='' OR stop>1475482860) ORDER BY sorting
    )
    Kannst du damit was anfangen?

    Viele Grüße, vielen Dank,
    Flx.
    Geändert von flx (03.10.2016 um 09:51 Uhr)

  4. #4
    Contao-Nutzer
    Registriert seit
    24.02.2010.
    Beiträge
    64

    Standard

    Ich hab jetzt nach deinem Beispiel
    $t = \PageModel::getTable();
    in drei weiteren Funktionen der Klasse eingesetzt. Es wurden dann nach und nach andere "uneindeutige" Spaltennamen bemeckert.
    Im Ergebnis läuft's jetzt. Der $t-Hack steht jetzt in folgenden Funktionen:

    findRootPagesForPage
    findMasterRootForPage
    findAssociatedForPage
    addPublishingConditions

    Könnte es an MariaDB liegen? Die Datenbankversion ist

    mysql Ver 15.1 Distrib 10.0.26-MariaDB

    Viele Grüße,
    Flx.
    Geändert von flx (03.10.2016 um 10:36 Uhr)

  5. #5
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.094
    Partner-ID
    10107

    Standard

    @Toflar: in den Models musst/solltest du immer den Table Name zu den Fields setzen - also in allen Funktionen.
    Geändert von Spooky (03.10.2016 um 10:58 Uhr)

  6. #6
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.094
    Partner-ID
    10107

    Standard

    @flx: ersetze auch die Funktion findMasterRootForPage hiermit:
    PHP-Code:
        /**
         * Finds the root page of fallback language for the given page.
         *
         * @param PageModel $page
         *
         * @return \PageModel|null
         */
        
    public function findMasterRootForPage(PageModel $page)
        {
            
    $page->loadDetails();

            
    $t = static::$strTable;

            
    $columns = [
                
    "$t.type='root'",
                
    "$t.fallback='1'",
                
    "$t.languageRoot=0",
                
    "(
                    
    $t.dns=? 
                    OR 
    $t.dns IN (SELECT dns FROM tl_page WHERE type='root' AND fallback='1' AND id IN (SELECT languageRoot FROM tl_page WHERE type='root' AND fallback='1' AND dns=?)) 
                    OR 
    $t.dns IN (SELECT dns FROM tl_page WHERE type='root' AND fallback='1' AND languageRoot IN (SELECT id FROM tl_page WHERE type='root' AND fallback='1' AND dns=?))
                )"
            
    ];

            return 
    PageModel::findOneBy(
                
    $columns,
                [
    $page->domain$page->domain$page->domain]
            );
        } 

  7. #7
    Contao-Nutzer
    Registriert seit
    24.02.2010.
    Beiträge
    64

    Standard

    Spooky, vielen Dank. Ich habe im Ergebnis an vier Stellen den Tabellennamen ergänzt:

    findRootPagesForPage
    findMasterRootForPage
    findAssociatedForPage
    addPublishingConditions

    Damit funktioniert das Frontend wieder.
    @Toflar, wenn ich ein upgedatete Version der Klasse hier zum Testen einspielen soll, her damit. :D

    Danke euch beiden,
    Flx.

  8. #8
    Contao-Urgestein Avatar von Toflar
    Registriert seit
    15.06.2009.
    Beiträge
    4.467
    Partner-ID
    8667
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    @Toflar: in den Models musst/solltest du immer den Table Name zu den Fields setzen - also in allen Funktionen.
    Jo, mach ich auch.
    Contao Core-Entwickler @terminal42 gmbh
    Wir sind Contao Premium-Partner!
    Für Individuallösungen kannst du uns gerne kontaktieren.
    PS: Heute schon getrakked?

  9. #9
    Contao Core-Team
    Association Vorstand
    Avatar von andreas.schempp
    Registriert seit
    15.06.2009.
    Ort
    Lyss
    Beiträge
    5.613
    Partner-ID
    8667
    Contao-Projekt unterstützen

    Support Contao
    terminal42 gmbh
    Wir sind Contao Premium-Partner! Für Modulwünsche oder Programmierungen kannst du uns gerne kontaktieren.
    Hilfe für Isotope eCommerce kann man auch kaufen: Isotope Circle

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •