Большинство функций в проекте работают, но когда дело доходит до регистрации результатов, я получаю сообщение об ошибке.
Это обширная система соревнований по стрельбе из пистолета, в которой администраторы могут создавать соревнования различных видов. Стрелки могут зарегистрироваться и записаться на соревнования. По окончании соревнований результаты вводятся в систему. Вот когда появляется проблема.
Система обновлена с Laravel 5.3 до 8 и отлично работает в 5.3. Вот работающая тестовая система 5.3: https://test.webshooter.se
Неопределенная переменная: патрулирует Ошибка:
 [2022-02-20 14:14:12] local.ERROR: Undefined variable: patrols {"userId":1,"exception":"[object] (ErrorException(code: 0): Undefined variable: patrols at /Users/ralph/laravel9/webshooter_web/app/Repositories/ResultsRepository.php:156)
Возможный тип_патруля: ноль, финал, различение. В данном случае это тип null.
Это часть PatrolRepository.php, где возникает ошибка:
 public function getPatrols($competitionsId)
 {
 if (!$this->request->has('patrol_type')):
 $patrols = Patrol::where('competitions_id', $competitionsId)->orderBy('sortorder')->get();
 elseif ($this->request->get('patrol_type') == 'finals'):
 $patrols = PatrolFinals::where('competitions_id', $competitionsId)->orderBy('sortorder')->get();
 elseif ($this->request->get('patrol_type') == 'distinguish'):
 $patrols = PatrolDistinguish::where('competitions_id', $competitionsId)->orderBy('sortorder')->get();
 endif;
 return $patrols;
 }
Вместо этого с этим кодом он работает очень хорошо:
public function getPatrols($competitionsId)
{
 if ($this->request->get('patrol_type') == 'finals'):
 return PatrolFinals::where('competitions_id', $competitionsId)->orderBy('sortorder')->get();
 endif;
 
 if ($this->request->get('patrol_type') == 'distinguish'):
 return PatrolDistinguish::where('competitions_id', $competitionsId)->orderBy('sortorder')->get();
 endif;
 return Patrol::where('competitions_id', $competitionsId)->orderBy('sortorder')->get();
}
Он не проверяет наличие нуля, вместо этого он проверяет другие состояния, и если ни одно из них не является нулевым.
В этом случае тип_патруля равен нулю. Предполагается, что функция получает информацию из базы данных: патрулирование таблиц. Затем он создает сообщения в таблице базы данных: результат. Эти сообщения должны показывать форму, в которую можно вводить результаты. Но ничего не отображается. Это «filter_default.blade.php», который покажет форму для нулевого патруля:
 <div class="row">
 <div class="col-sm-3">
 <div class="panel panel-default">
 <div class="panel-heading">{{_('Inmatning')}}</div>
 <table class="table table-bordered">
 <tbody>
 <tr>
  <td>{{_('Datum')}}</td>
  <td><% competitions.competition.date %></td>
 </tr>
 <tr>
  <td>{{_('Tävlingsgrupp')}}</td>
  <td><% (competitions.competition.championship.name)? competitions.competition.championship.name: '-' %></td>
 </tr>
 <tr ng-if="competitions.competitions.competitiontype">
  <td>{{_('Tävlingstyp')}}</td>
  <td><% competitions.competitions.competitiontype.name %></td>
 </tr>
 </tbody>
 </table>
 <div class="panel-body">
 <div class="row form-group">
  <div class="col-lg-12">
  <label><% competitions.competition.translations.patrols_name_singular | ucfirst %></label>
  <select class="form-control" ng-options="patrol.sortorder as (patrol.sortorder+ ' ('+patrol.start_time_human+')') for patrol in results.patrols" ng-model="results.filter.patrol">
  <option value=""><% competitions.competition.translations.patrols_name_singular | ucfirst %></option>
  </select>
  </div>
 </div>
 <div class="row form-group">
  <div class="col-lg-6">
  <label><% competitions.competition.translations.stations_name_singular | ucfirst %> ({{_('från')}})</label>
  <select class="form-control" ng-options="n for n in [] | range:1:competitions.competition.stations_count+1" ng-model="results.filter.station_start">
  <option value=""><% competitions.competition.translations.stations_name_singular | ucfirst %></option>
  </select>
  </div>
  <div class="col-lg-6">
  <label><% competitions.competition.translations.stations_name_singular | ucfirst %> ({{_('till')}})</label>
  <select class="form-control" ng-options="n for n in [] | range:1:competitions.competition.stations_count+1" ng-model="results.filter.station_end">
  <option value=""><% competitions.competition.translations.stations_name_singular | ucfirst %></option>
  </select>
  </div>
 </div>
 <div class="row form-group">
  <div class="col-lg-6">
  <label><% competitions.competition.translations.patrols_lane_singular | ucfirst %> ({{_('från')}})</label>
  <select class="form-control" ng-options="n for n in [] | range:1:competitions.competition.patrol_size+1" ng-model="results.filter.lane_start">
  <option value=""><% competitions.competition.translations.patrols_lane_singular | ucfirst %></option>
  </select>
  </div>
  <div class="col-lg-6">
  <label><% competitions.competition.translations.patrols_lane_singular | ucfirst %> ({{_('till')}})</label>
  <select class="form-control" ng-options="n for n in [] | range:1:competitions.competition.patrol_size+1" ng-model="results.filter.lane_end">
  <option value=""><% competitions.competition.translations.patrols_lane_singular | ucfirst %></option>
  </select>
  </div>
 </div>
 <div class="row form-group">
  <div class="col-lg-12">
  <div class="checkbox">
  <label>
  <input type="checkbox" ng-model="results.filter.per_shot" ng-true-value="1" ng-false-value="0"> {{_('Registrera alla skott')}}
  </label>
  </div>
  </div>
 </div>
 <div class="row form-group">
  <div class="col-lg-12">
  <div class="checkbox">
  <label>
  <input type="checkbox" ng-model="results.filter.show_empty_lanes" ng-true-value="1" ng-false-value="0"> {{_('Visa tomma %s')}}
  </label>
  </div>
  </div>
 </div>
 <a class="btn btn-primary" ui-sref-opts="{reload: true}" ui-sref="competitions.admin.results.registration({competitions_id: competitions.competition.id, patrol:results.filter.patrol, patrol_type:results.filter.patrol_type, station_start: results.filter.station_start, station_end: results.filter.station_end, lane_start:results.filter.lane_start, lane_end:results.filter.lane_end, show_empty_lanes:results.filter.show_empty_lanes, per_shot:results.filter.per_shot})">{{_('Visa')}}</a>
 </div>
 </div>
 </div>
 <div class="col-sm-9">
 <div ng-if="results.signups">
 <div ui-view="military" ng-if="competitions.competition.results_type == 'military'"></div>
 <div ui-view="field" ng-if="competitions.competition.results_type == 'field' || competitions.competition.results_type == 'pointfield' || competitions.competition.results_type == 'magnum'"></div>
 <div ui-view="precision" ng-if="competitions.competition.results_type == 'precision'"></div>
 </div>
 </div>
</div>
Вот Models/Result.php:
 <?php
 namespace App\Models;
 use Illuminate\Database\Eloquent\Model;
 use Illuminate\Database\Eloquent\SoftDeletes;
 class Result extends Model
{
 use SoftDeletes;
 protected $table = 'results';
 protected $fillable = [
 'stations_id',
 'figure_hits',
 'hits',
 'points',
 'station_figure_hits',
 ];
 protected $casts = [
 'station_figure_hits' => 'array',
 ];
 public function Signup()
 {
 return $this->belongsTo(\App\Models\Signup::class, 'signups_id', 'id');
 }
}
Вывод из отладчика:
 "patrol" => "1"
 "patrol_type" => null
 "station_start" => "1"
 "station_end" => "2"
 "lane_start" => "1"
 "lane_end" => "20"
 "show_empty_lanes" => "1"
 "per_shot" => "1"
Был бы признателен за некоторые идеи. С уважением, Ральф в Швеции
Решение проблемы
Кажется, что любое другое условие соответствует, и вы возвращаете $patrols; Чтобы избежать ошибки, вы можете вернуться так: return $patrols?? null;или инициировать $$патрули в начале вашей функции. Вместо null у вас есть проверка того, что ожидается.
Комментариев нет:
Отправить комментарий