2013-11-19 3 views
0

I знаю Это будет простой, и я посмотрел ... Я должен просто пропустить его.
Прошло некоторое время с тех пор, как я закодировал в Laravel (или, вообще, в этом отношении :), и я действительно могу использовать подталкивание в правильном направлении.
FYI, это для веб-службы REST-ish, поэтому на самом деле нет интерфейса.Laravel 3, Красноречивый: SELECT с множественными условиями WHERE

ЦЕЛЬ:
Process Найти запросы против people таблицы, где запрос может быть для одного поля или пяти полей, или где-нибудь между ними.
Вот $accessible поля:

  • Fname
  • ми
  • LName
  • ака
  • пол

Пример ПРЕДЛАГАЕТ:

  • $input = array('aka'=>'sammy','gender'=>'female')
  • $input = array('fname'=>'william','aka'=>'will')
  • $input = array('fname'=>'william','lname'=>'smith')
  • $input = array('lname'=>'smith')
  • и т.д., и т.д., и т.д ...

ПРОБОВАЛИ:
A)

$payload = new PersonEntity((array)$input); 

B)

$model = new PersonEntity((array)$input); 
$payload = $model->get(); 

C)

$model = new PersonEntity; 

foreach($input AS $field => $value) 
{ 
    if(in_array($field, $model::$accessible)) 
    { 
     $model->where($field, '=', $value); 
    } 
} 

$results = $model->get(); 

ОЖИДАЕТ:
Я ожидаю возвращения массива объектов, которые соответствуют запросу.

ПОЛУЧАТЬ:
В зависимости от того, что я пытаюсь в тот момент, когда я получаю результаты, вся таблица возвращается.
Через профилировщик, я могу видеть, что он просто работает SELECT * FROM people.

ответ

0

Я не уверен, я понимаю, но с Laravel вы можете цепи, где условия таким образом:

$model = DB::table('people'); 

$model = $model->where(function($model) 
{ 
    foreach($input AS $field => $value) 
    { 
     if(in_array($field, $model::$accessible)) 
     { 
      $model->where($field, '=', $value); 
     } 
    } 
}); 

$results = $model->get(); 
+0

Oooohhhhh, это правильно !!! Функция обратного вызова ... Я _knew_ Я сделал это раньше. Спасибо, что пробежал мою память! – mOrloff

Смежные вопросы