2015-12-21 6 views
3

Мне нравится использовать функцию dd для отладки. На этот раз, когда я использую его для отображения списка назначений, я не вижу (без щелчка) данных в атрибутах и ​​оригинале. Вместо этого я вижу скобки [ …19], не знаю почему.Работает ли вспомогательная функция DD Laravels?

Collection {#3061 ▼ 
    #items: array:548 [▼ 
    0 => Appointment {#821 ▼ 
     #table: "appointments" 
     #fillable: array:16 [ …16] 
     #connection: null 
     #primaryKey: "id" 
     #perPage: 15 
     +incrementing: true 
     +timestamps: true 
     #attributes: array:19 [ …19] 
     #original: array:19 [ …19] 
     #relations: array:2 [ …2] 
     #hidden: [] 
     #visible: [] 
     #appends: [] 
     #guarded: array:1 [ …1] 
     #dates: [] 
     #dateFormat: null 
     #casts: [] 
     #touches: [] 
     #observables: [] 
     #with: [] 
     #morphClass: null 
     +exists: true 
     +wasRecentlyCreated: false 
    } 
    1 => Appointment {#822 ▶} 
    2 => Appointment {#823 ▶} 
    3 => Appointment {#824 ▶} 
    4 => Appointment {#825 ▶} 
    5 => Appointment {#826 ▶} 
    6 => Appointment {#827 ▶} 
    7 => Appointment {#828 ▶} 

И позже в списке, я не могу даже видеть внутри назначения (без стрелы):

81 => Appointment {#902 ▶} 
    82 => Appointment {#903 ▶} 
    83 => Appointment {#904 ▶} 
    84 => Appointment {#905 ▶} 
    85 => Appointment {#906 …23} 
    86 => Appointment {#907 …23} 
    87 => Appointment {#908 …23} 
    88 => Appointment {#909 …23} 
    89 => Appointment {#910 …23} 
    90 => Appointment {#911 …23} 

Но когда я использую var_dump, мои данные выглядит отлично:

array(548) { 
     [0]=> 
     array(21) { 
     ["id"]=> 
     int(149) 
     ["appointmenttype_id"]=> 
     NULL 
     ["appointmentlocationtype_id"]=> 
     NULL 
     ["appointment_start"]=> 
     object(Carbon\Carbon)#812 (3) { 
      ["date"]=> 
      string(26) "2015-12-21 07:00:00.000000" 
      ["timezone_type"]=> 
      int(3) 
      ["timezone"]=> 
      string(16) "America/New_York" 
     } 
     ["appointment_end"]=> 
     object(Carbon\Carbon)#811 (3) { 
      ["date"]=> 
      string(26) "2015-12-21 09:00:00.000000" 
      ["timezone_type"]=> 
      int(3) 
      ["timezone"]=> 
      string(16) "America/New_York" 
     } 

Кто-нибудь еще испытал эту ситуацию?

ответ

5

Это не очень известное предупреждение о возврате слишком большого списка результатов. Как правило, dd() предназначен для быстрого обзора данных, которые вы возвращаете, и обрабатывает «сверление» на небольших группах данных. Как только вы достигнете определенного номера (я забуду точный, 500, может быть?), Эта функциональность больше не работает.

Если вы абсолютно необходимо, чтобы увидеть эти данные, прежде чем использовать его в коде где-нибудь, используйте пункт limit() прежде чем get() результаты, или использовать dd($example[0]), чтобы увидеть детали результате одного. Надеюсь, это поможет!

+0

Супер, спасибо @timlewis! – user3489502

1

Не является ошибкой в ​​dd() только тем, как настроен базовый Sympony VarDumper.

Я считаю, что данная строка this one, которая имеет наборы $maxDepth до 20, но я еще не проверил это.

Глядя на Laravel Dumperlogic, похоже, что это не так, чтобы отменить это изнутри Laravel.

1

Я нашел способ обойти это, хотя и не рекомендуется, если вы действительно хотите, чтобы весь объект сбрасывали, добавьте следующий фрагмент кода в /bootstrap/autoload.php

if (! function_exists('dd')) { 
    /** 
    * Dump the passed variables and end the script. 
    * 
    * @param mixed 
    * @return void 
    */ 
    function dd() 
    { 
     array_map(function ($x) { 
      $dumper = 'cli' === PHP_SAPI ? new \Symfony\Component\VarDumper\Dumper\CliDumper() : new \Illuminate\Support\Debug\HtmlDumper(); 
      $cloner = new \Symfony\Component\VarDumper\Cloner\VarCloner(); 
      $cloner->setMaxItems(-1); 
      $cloner->setMaxString(-1); 
      $dumper->dump($cloner->cloneVar($x)); 
     }, func_get_args()); 

     die(1); 
    } 
} 

Это должно быть добавлено выше линии:

требуют DIR '/ ../продавец/autoload.php';.

Он переопределяет функцию laravel dd и устанавливает «setMaxItems» и «setMaxString» на объекте Symfony VarCloner перед сбросом.

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