2015-11-02 18 views
12

In laravel 5.1, voglio fare comelaravel 5 multipla selezionare() nel generatore di query

$myTable = MyTable->select('firstField'); 

if ($somethingTrue) { 
    $myTable->select('secondField'); 
} 

$myTable->get(); 

dove voglio sia firstField & secondField da selezionare.
Ovviamente il codice sopra non funziona, cioè solo il secondo campo è selezionato alla fine.

Esiste qualche funzione fornita dalla classe del generatore di query che può fare esattamente ciò che voglio?

risposta

13

Sì, è possibile utilizzare addSelect()

Dal Query Builder documentation under "Selects":

Se hai già un esempio generatore di query e si desidera aggiungere una colonna alla sua clausola di selezione esistente, è possibile utilizzare l'addSelect metodo:

$query = DB::table('users')->select('name'); 
$users = $query->addSelect('age')->get(); 

Inoltre, il API documentation (come apposto al documentat scritta ion) può anche gettare ulteriore luce su quali funzioni sono disponibili sulle classi principali.

2

La risposta accettata è probabilmente più elegante, ma è anche possibile utilizzare solo una serie di campi per la clausola di selezione. risposta

$fields = ['firstField']; 

if ($someCondition) { 
    $fields[] = 'secondField'; 
} 

$result = DB::table('users')->select($fields)->get(); 
0

di mwallisch è meglio di uno, perché accettata, se si dispone di più luoghi in cui si sta definendo seleziona quindi addSelect abituato lavoro.

Per esempio, codice seguente getterà errore:

$myTable = MyTable->select('firstField'); 

if ($somethingTrue) { 
    $myTable->addSelect('secondField'); 
} 

if ($somethingElseTrue) { 
    $myTable->addSelect('thirdField'); 
} 

$myTable->get(); 

mentre può essere fatto come:

$fields = ['firstField']; 

    if ($somethingTrue) { 
     $fields[] = 'secondField'; 
    } 

    if ($somethingElseTrue) { 
     $fields[] = 'thirdField'; 
    } 

    $result = DB::table('users')->select($fields)->get(); 
Problemi correlati