2013-09-17 4 views
0

У меня есть простой цикл foreach, который проверяет каждую выбранную службу (из html-формы), а затем сохраняет эту информацию в базе данных с помощью модели Laravel 4. Информация экономит штраф, но сохраняет данные для каждого входа, даже если это значение равно null. Как я могу просто сохранить данные, если он выбран?Как предотвратить ввод нулевых значений

Контроллер

public function getServices() { 
      $user = User::find(Auth::user()->id); 

      $input = [ 
        'rooms' => Input::get('rooms'), 
        'pr_deodorizer' => Input::get('pr_deodorizer'), 
        'pr_protectant' => Input::get('pr_protectant'), 
        'pr_sanitizer' => Input::get('pr_sanitizer'), 
        'fr_couch' => Input::get('fr_couch'), 
        'fr_chair' => Input::get('fr_chair'), 
        'pr_sectional' => Input::get('pr_sectional'), 
        'pr_ottoman' => Input::get('pr_ottoman'), 
        'pr_tile' => Input::get('pr_tile'), 
        'pr_hardwood' => Input::get('pr_hardwood') 
      ]; 

      $empty = '<i class="icon-warning-sign"></i> No services were selected. Need help? Contact us';       

      if(empty($input['rooms']) && empty($input['pr_deodorizer']) && 
        empty($input['pr_sanitizer']) && empty($input['pr_protectant']) 
        && empty($input['fr_couch']) && empty($input['fr_chair']) 
        && empty($input['pr_sectional']) && empty($input['pr_ottoman']) 
        && empty($input['pr_tile']) && empty($input['pr_hardwood']) 
        ){ 
       return Redirect::to('book/services')->withErrors($empty)->withInput(); 
      } 

      foreach($input as $services) 
      { 
       $service = new Service(); 

       $service->userID = $user->id; 
       $service->services = $services; 

       $service->save(); 
      } 
      return Redirect::to('book/schedule'); 
    } 

Это как это сохранение в моей базе данных:

id userID services price created_at updated_at 
171 1   3 NULL 2013-09-17 03:13:24 2013-09-17 03:13:24 
172 1    NULL 2013-09-17 03:13:24 2013-09-17 03:13:24 
173 1    NULL 2013-09-17 03:13:25 2013-09-17 03:13:25 
174 1    NULL 2013-09-17 03:13:25 2013-09-17 03:13:25 
175 1    NULL 2013-09-17 03:13:25 2013-09-17 03:13:25 
176 1    NULL 2013-09-17 03:13:25 2013-09-17 03:13:25 
177 1    NULL 2013-09-17 03:13:25 2013-09-17 03:13:25 
178 1    NULL 2013-09-17 03:13:25 2013-09-17 03:13:25 
179 1    NULL 2013-09-17 03:13:25 2013-09-17 03:13:25 
180 1    NULL 2013-09-17 03:13:25 2013-09-17 03:13:25 

Колонку услуг является то, что я смотрю на. Пользователь выбрал сервис с идентификатором service 3, но ничего больше. Но он занимает пустые строки, которые могут вызвать ошибки в отчетности. Как я могу заставить его просто сохранить данные, которые они на самом деле заполняют? Возможно ли с помощью проверки Laravel 4?

+0

Это не выглядит очень Laravel-ish ... Подумайте о разделении проблем. Затем проверьте встроенный помощник валидатора для проверки ваших данных. Вы можете включить массовое присвоение с помощью 'protected $ guarded = []', а затем оттуда, проверять поля один за другим в службе и вводить их в контроллер. Если вы следуете рекомендациям, ваш контроллер должен быть не более 5-10 строк. – elclanrs

+0

Не совсем уверен, что вы имеете в виду. L4 не имеет каких-либо валидаторов для проверки ввода любых полей (поэтому я просто создал простой, если (пустой)). Если бы я снова очищал массив и проверку против этих массивов, тогда контроллер был бы значительно меньше. Это все еще функция разработки. Но это не относится к моему вопросу. – Lynx

+0

Это всего лишь наблюдение за вашим кодом, но я хочу сказать, что вы можете абстрагировать логику, повторяющуюся в этом огромном статусе 'if', в службу, использующую валидатор, тогда вам нужно всего лишь _one_' isset'. Проверьте документы для «Расширение класса проверки» здесь http://laravel.com/docs/validation#custom-validation-rules – elclanrs

ответ

0

Я согласен с elclanrs - код не выглядит правильным.

Но чтобы ответить на ваш вопрос - разве вы не могли это сделать?

  foreach($input as $services) 
      { 
       $service = new Service(); 

       $service->userID = $user->id; 
       $service->services = $services; 

       if (! (is_null($services->services))) 
       { 
        $service->save(); 
       } 
      } 
+0

nope. Все еще сохраняет все пустые записи служб – Lynx

+0

, если вы var_dump (% services-> services) в цикле - что показано? возможно, вам нужно проверить на $ services-> services = "" - потому что это пустая строка, а не нуль? – Laurence

+0

не может var_dump службы $ services->, потому что он не существует. var_dumping $ service-> services возвращает только одно значение "3" – Lynx

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