Refactor где использовать в глобальных областях в Laravel

Чтобы добавить к тому, что упомянул Роб. Настройка точек останова в вашем приложении позволяет поэтапно обрабатывать стек. Это позволяет разработчику использовать отладчик, чтобы увидеть, в какой точной точке метод делает что-то непредвиденное.

Так как Rob использовал NullPointerException (NPE), чтобы проиллюстрировать что-то общее, мы можем помочь удалите эту проблему следующим образом:

, если у нас есть метод, который принимает такие параметры, как: void (String firstName)

. В нашем коде мы хотели бы оценить, что firstName содержит значение, мы сделали бы это так: if(firstName == null || firstName.equals("")) return;

Вышеупомянутое не позволяет нам использовать firstName как небезопасный параметр. Поэтому, выполняя нулевые проверки перед обработкой, мы можем помочь обеспечить правильность работы нашего кода. Чтобы расширить пример, который использует объект с помощью методов, мы можем посмотреть здесь:

if(dog == null || dog.firstName == null) return;

Выше был правильный порядок проверки нулей, мы начинаем с базового объекта , собака в этом случае, а затем начните спускаться по дереву возможностей, чтобы убедиться, что все будет действовать до обработки. Если бы порядок был отменен, NPE потенциально может быть выброшен, и наша программа потерпит крах.

0
задан shyammakwana.me 24 March 2019 в 19:50
поделиться

1 ответ

Я наткнулся на тот же подход, но когда таблица стала больше (core_challenges_table в вашем сценарии), whereHas оказалась очень медленной (около 1 минуты времени отклика).

Поэтому я использовал решение, подобное этому:

$ids = CoreChallenge::where('status', 'active')->pluck('id');

$challenges = Challenge::with('core_challenges')
                        ->whereIn('core_challenge_id', $ids)
                        ->get();

При таком подходе мой запрос сократился до 600 мс с 1 минуты.

Который может быть переведен в модельные рамки

class Challenge {

   public function scopeActive($query) {
       $activeIds = CoreChallenge::where('status', 'active')->pluck('id');

       return $query->whereIn('core_challenge_id', $ids);
   }
}

Challenge::with('core_challenges')->active()->get();
0
ответ дан senty 24 March 2019 в 19:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: