2017-06-30 3 views
0

Ich habe eine Liste für multiple choices. Wenn der Benutzer keine Wahl hat, sollte die betreffende Information die Artikel ALL anzeigen. Ich habe einen Standardwert ALL in meinem form diesen folgenden:Wie bekomme ich einen Wert von einem leeren Wert in PHP

<?php 

    $user = $app['security']->getToken()->getUser(); 
      $default = 'ALL'; 
      $form = $app['form.factory']->createBuilder('form',['lru' => [$default]])->setMethod('GET') 
->add('lru', 'choice', array(
        'choices' => array(
        $default => $default, 

        '\'ATSU\'' => 'ATSU', ....) 

        'required' => FALSE, 
        'empty_value' => 'ALL', 
        'empty_data' => NULL, 
        'multiple' => TRUE 
        )) 

Wenn ich einen Fehler gezeigt ausführen, soll ich meinen Antrag ändere ein empty_valueALL standardmäßig zu nehmen:

ich in meiner Klasse deklarierte :

private $_sqlSelect = 'Select * '; 
    private $_sqlFrom = 'From `piecearticles`'; 
    private $_sqlWhere = 'Where '; 

Und nach meiner Funktion:

if ($this->_count == 0) { 
     $this->_sqlWhere.="`piecearticles`.`ID_Article`=`article`.`ID_Article` AND `piecearticles`.`Designiation`=`article`.`Designiation` AND `article`.`ID_LRU`=`lru`.`ID_LRU`"; 

     $this->_count++; 
    } else { 
     $this->_sqlWhere.="AND `piecearticles`.`ID_Article`=`article`.`ID_Article` AND `piecearticles`.`Designiation`=`article`.`Designiation` AND `article`.`ID_LRU`=`lru`.`ID_LRU`"; 
    } 

    if (!empty($this->_lru)) { 
     if(is_array($this->_lru) or ($this->_lru instanceof Traversable)) { 
      $this->_sqlWhere.=" AND `lru`.`LRU` IN (" . implode(",", $this->_lru) . ")"; //='" . $this->_lru . "'"; 
     } else { 
      $this->_sqlWhere.=" AND `lru`.`LRU`='" . $this->_lru . "'"; 
     } 
    } 
    //if (strpos($this->_sqlFrom,'article') == false) { 
    $this->_sqlFrom.=', `article` '; 
    //} 
    if (strpos($this->_sqlFrom, 'lru') == false) { 
     $this->_sqlFrom.=',`lru`'; 
    } 
    //echo count($this->_lru); 
} 

Ich habe eine echo meiner query, es gibt lru zurück. LRU IN (ALL) ` Wie kann ich meine Anfrage ändern, um einen Standardwert 'ALL' zu nehmen. Danke.

+1

Ihre bereitgestellten Informationen hinterfragen mehr als Antworten. Z.B. Wo wird '$ this -> _ sqlFrom' initialisiert? In Bezug auf "ALL": Sie implementieren dies in der Regel durch Weglassen der entsprechenden WHERE-Klausel. – Adder

+0

@Adder Ich habe die _sqlForm in meiner Klasse initialisiert (ich habe meine Frage oben geändert). – vero

+0

Für welches Feld möchten Sie ALLE auswählen? Es gibt ein Problem in Ihrem Code, das wird nicht konsistent verwendet '$ this -> _ sqlWhere. =" AND "und auch, kein' AND' wird benötigt, wenn es als erstes zur where-Klausel hinzugefügt wird. Deshalb bin ich oft starte meine where-Klausel mit 'WHERE 1 = 1'. – Adder

Antwort

1

Ich werde es wagen, ein Teilbeispiel zu liefern, von dem ich hoffe, dass es sich um eine Spalte handelt. Ich gehe davon aus, dass der Benutzer entweder nur das Feld "ALL" prüft oder mehrere andere Felder auswählt.

if (!empty($this->_lru)) { 
     if((is_array($this->_lru) or ($this->_lru instanceof Traversable)) && ! in_array('ALL', $this->_lru)) { 
      $this->_sqlWhere.=" AND `lru`.`LRU` IN (" . implode(",", $this->_lru) . ")"; //='" . $this->_lru . "'"; 
     } else if ($this->_lru != 'ALL' && ! in_array('ALL', $this->_lru)) { 
      $this->_sqlWhere.=" AND `lru`.`LRU`='" . $this->_lru . "'"; 
     } 
    } 

Dieser Code-Schnipsel sollte Folgendes erreicht werden: Wenn kein Feld überhaupt gewählt ist, behandelt es als eine Abfrage für alle. Wenn ein Feld für "ALL" ausgewählt ist, lassen Sie die Where-Klausel weg. Wenn das _lru ein Array ist, implodieren Sie das Array in eine WHERE-Klausel. Wenn das _lru aus Gründen, die ich nicht verstehe, kein Array ist, verwende seinen Wert in der where-Klausel.

Verwandte Themen