Ergebnis 1 bis 7 von 7

Thema: \Database und \Model::findBy liefern unterschiedliche Ergebnisse

  1. #1
    Contao-Nutzer
    Registriert seit
    02.05.2012.
    Beiträge
    16

    Standard \Database und \Model::findBy liefern unterschiedliche Ergebnisse

    Hallo zusammen,

    ich würde gerne mit Models arbeiten, aber

    Code:
    $wertetabelle = \Wertetabelle::findBy(array('Artikelnummer=?'), array(\Input::get(Article::$strDetailKey)));
    liefert mir 15 mal den selben Datensatz bzw. 15 mal das selbe Model in der Collection, wohingegen mir

    PHP-Code:
    $wertetabelle = \Database::getInstance()->prepare("SELECT * FROM tl_pc_wertetabelle WHERE Artikelnummer =?")->execute(\Input::get(Article::$strDetailKey)); 
    die 15 unterschiedlichen Datensätze aus der DB liefert. Ich habe schon einiges versucht und gegooglt, aber finde einfach den Fehler nicht. Hatte jemand mal ein ähnliches Problem, oder weiss was ich falsch mache?

    Vielen Dank.

    Grüße.

    PS: Contao 3.5.3, keine Erweiterungen installiert, lediglich das Modul welches entwickelt wird.

  2. #2
    Contao-Urgestein
    Registriert seit
    03.06.2010.
    Ort
    Wuppertal
    Beiträge
    2.149
    User beschenken
    Wunschliste

    Standard

    Wie kommst du auf die Syntax?

    PHP-Code:
        public static function findBy($strColumn$varValue, array $arrOptions=array()) 

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

    Standard

    Zitat Zitat von Flex Beitrag anzeigen
    Wie kommst du auf die Syntax?
    Das stimmt schon so. $strColumn und $varValue können auch Arrays sein. Zur Erklärung:

    Model::findBy(…) macht folgendes:
    PHP-Code:
            $arrOptions array_merge
            
    (
                array
                (
                    
    'column' => $strColumn,
                    
    'value'  => $varValue,
                    
    'return' => $blnModel 'Model' 'Collection'
                
    ),

                
    $arrOptions
            
    );

            return static::
    find($arrOptions); 
    Model::find(…) macht wiederum folgendes:
    PHP-Code:
            $strQuery = static::buildFindQuery($arrOptions); 
    Und QueryBuilder::find(…) macht folgendes:
    PHP-Code:
                $strQuery .= " WHERE " . (is_array($arrOptions['column']) ? implode(" AND "$arrOptions['column']) : $arrOptions['table'] . '.' $arrOptions['column'] . "=?"); 
    Ist $strColumn also ein Array aus mehreren Bedingungen, werden diese im QueryBuilder mit AND verknüpft.


    @tiophen: das heißt, wenn du
    PHP-Code:
    $wertetabelle = \Wertetabelle::findBy(array('Artikelnummer=?'), array(\Input::get(Article::$strDetailKey)));
    while( 
    $wertetabelle->next() )
        echo 
    $wertetabelle->Artikelnummer
    machst, wird 15 mal das Gleiche ausgegeben?
    Geändert von Spooky (29.09.2015 um 21:54 Uhr)

  4. #4
    Contao-Nutzer
    Registriert seit
    02.05.2012.
    Beiträge
    16

    Standard

    Hallo,

    erstmal vielen Dank für die Antworten.

    Ich bekomme eine Collection in welcher 15 mal das selbe Model liegt. Beim Model selbst handelt es sich um den letzten Datensatz der Query. Also um genau zu sein: Query enthält ID's 200 bis 215, Collection enthält 15 mal Model mit ID 215.

    Zum Betrachten von Collection und Query nutze ich foreach wie es in der Doku der Klasse beschrieben wird.

    Da ich keine Daten manipulieren möchte, sondern es nur um die Anzeige im Frontend geht kann ich damit leben, dass ich Querys an der Stelle nutze. Seltsam kommt mir das Verhalten natürlich trotzdem vor.

    Mit freundlichen Grüßen
    tiophen

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

    Standard

    Zitat Zitat von tiophen Beitrag anzeigen
    Zum Betrachten von Collection und Query nutze ich foreach wie es in der Doku der Klasse beschrieben wird.
    Wo steht das? Bei der Collection musst du es so machen wie ich geschrieben habe.

  6. #6
    Contao-Nutzer
    Registriert seit
    02.05.2012.
    Beiträge
    16

    Standard

    https://docs.contao.org/books/cookbook/de/Models.html

    PHP-Code:
    // Fetch all published Articles
    $objArticles = \ArticleModel::findBy('published''1');

    if (
    null === $objArticles) {
        echo 
    'Keine Artikel gefunden.';
    } else {
        echo 
    $objArticles->count().' Artikel gefunden.';
    }

    // Verwenden des IteratorAggregate interface
    foreach($objArticles as $objArticle) {
        echo 
    $objArticle->title.'<br>';
    }

    // Verwenden der Iterator-Methoden
    $objArticles->reset();
    while(
    $objArticles->next()) {
        echo 
    $objArticles->title.'<br>';

    Wenn ich also meine Collection wie folgt ausgeben lasse

    PHP-Code:
    foreach($wertetabelle as $objWert) { 
        echo 
    $objWert->id.'<br>'

    erhalte ich 15 mal die id 215.

  7. #7
    Contao-Urgestein
    Registriert seit
    29.10.2009.
    Ort
    Magdeburg
    Beiträge
    2.020
    Partner-ID
    626
    User beschenken
    Wunschliste

    Standard

    Das ist äußerst seltsam. Ich nutze ständig Models auch mit der foreach Notation ohne Probleme. Überschreibt dein Model-Klasse irgendwelche Methoden der Contao-Model Klasse?

    Tritt das nur bei dem eigenen Model auf oder auch bei den Core Models?

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
  •