2017-10-17 9 views
0

Je suis en train de construire requête dynamique à l'aide des entrées de formulaire comme ci-dessous:injection dynamique de requête éloquente ne fonctionne pas dans Laravel

$query = new Doctor(); 

if (!empty($request->input('city'))) { 
    $city = $request->input('city'); 
    //Search for any thing like doctor name or last name 
    $query->where('city_id', $city); 
} 


    //Get doctor names result in collection type 
    $col = $query->where('level','LIKE','%%')->orderBy($Order_By, $Sort_Type)->toSql(); 

problème est la partie qui vérifient la ville et injectez ville où la clause en question ne fonctionne pas et ce que je reçois comme une requête est:

"select * from `doctors` where `level` LIKE ? order by `profile_views` desc" 

si je change la logique et la ville où mettre l'article en ligne unique comme:

$col = $query->where('city_id', $city)->where('level','LIKE','%%')->orderBy($Order_By, $Sort_Type)->toSql(); 

Le résultat de cette requête est:

"select * from `doctors` where `city_id` is null and `level` LIKE ? order by `profile_views` desc" 

comment puis-je faire la première logique à travailler?

+2

Je suppose que '$ city' est probablement nul. L'avez-vous vérifié avec 'var_dump ($ city)'? –

+1

Pour étendre la déclaration de @ aynber, vous voulez probablement '$ query = Doctor :: query();' - bien que je soupçonne que Bill est * aussi * correct. – ceejayoz

+0

@BillKarwin ce n'est pas lié à la valeur de $ city parce que je lui ai donné une valeur de chaîne et qu'elle n'apparaît toujours pas dans la requête. –

Répondre

2
$query = new Doctor(); 

crée un nouveau Docteur, mais vous ne le voulez pas vraiment. Au lieu de cela:

$query = Doctor::query(); 

crée une nouvelle requête contre le modèle Doctor, qui peut ensuite être étendue avec where() etc. choses.