Форумы портала PHP.SU » » CMS и фреймворки » factory-цикл с внешними переменнами

Страниц (1): [1]
 

1. mstdmstd - 05 Марта, 2018 - 14:20:58 - перейти к сообщению
Привет,
На php7.1/laravel 5.5 написал небольщой factory для добавления dummy данных
PHP:
скопировать код в буфер обмена
  1.  
  2. $events_added_count= 0;
  3. $events_to_add= 2;
  4. factory( \App\Event::class, $events_to_add)->create()->each(function($newEvent) {
  5. $usersList = User::getUsersList(ListingReturnData::LISTING, []);
  6. $usersArray= [];
  7. foreach( $usersList as $nextUser ) {
  8. $usersArray[]= $nextUser->id;
  9. }
  10.  
  11. echo '<pre>$newEvent->id::'.print_r($newEvent->id,true).'</pre>';
  12.  
  13. //                $events_added_count++;
  14. foreach( $usersArray as $next_key=>$next_user_id ) {
  15. factory(\App\EventUser::class, 1)->create(['event_id' => $newEvent->id, 'user_id'=> $next_user_id]);
  16. }
  17. });
  18.  

Код работает но
1) Мне не нравиться определять $usersList внутри цикле Но если его определить ДО цикла то как его передать в цикл
2) Я хочу сосчитать добавленные строки как передать $events_added_count в цикл и юзать его после цикла?

Знаю вариант записывать и читать в $_SESSIONS - но есть ли лучше варианты?

Спасибо!
2. Мелкий - 05 Марта, 2018 - 14:56:08 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. $someVariable = ...
  2. ... function($newEvent) use($someVariable, &$outVariable) {
  3. echo $someVariable . ' is here!';
  4. $outVariable = ...
  5. }
  6.  
  7. echo $outVariable . ' was changed too!';

http://php.net/manual/en/functions.anonymous.php
3. mstdmstd - 05 Марта, 2018 - 15:39:57 - перейти к сообщению
Спасибо, про эту возможность я в курсе, хотя и не пользовал практически.
Не очень понятно как это применимо к моему случаю.
Можно ли набросок синтаксиса ?
4. mstdmstd - 06 Марта, 2018 - 15:15:46 - перейти к сообщению
Спасибо за наводку : немного подумав у меня получился метод :

PHP:
скопировать код в буфер обмена
  1.         $events_added_count= 0;
  2.         $event_users_added_count= 0;
  3.         try {
  4.             DB::beginTransaction();
  5.  
  6.             $events_to_add= 5;
  7.  
  8.             $usersList = User::getUsersList(ListingReturnData::LISTING, []);
  9.             $usersArray= [];
  10.             foreach( $usersList as $nextUser ) {
  11.                 $usersArray[]= $nextUser->id;
  12.             }
  13.  
  14.             factory( \App\Event::class, $events_to_add)->create()->each(function($newEvent) use($usersArray, &$events_added_count, &$event_users_added_count ) {
  15.                 $events_added_count++;
  16.                 foreach( $usersArray as $next_key=>$next_user_id ) {
  17.                     factory(\App\EventUser::class, 1)->create(['event_id' => $newEvent->id, 'user_id'=> $next_user_id]);
  18.                     $event_users_added_count++;
  19.                 }
  20.             });
  21.  
  22.         } catch (Exception $e) {
  23.  
  24.             DB::rollBack();
  25.             throw $e;
  26.         }
  27.  
  28.         DB::commit();
  29.  
  30.         return response()->json( [ 'error_code'=> 0, 'message'=> '', 'events_added_count' => $events_added_count, 'event_users_added_count'=> $event_users_added_count ], HTTP_RESPONSE_OK );
  31.  
  32.  
Эта часть работает, но я создаю дату в пределах текущего месяца :

PHP:
скопировать код в буфер обмена
  1. 'at_time' => $faker->dateTimeThisMonth('now', Config::get('app.timezone'))->format('Y-m-d H:i:s'),  // Используя либу https://github.com/fzaninotto/Faker
  2.  

Но дата в пределах текущего месяца считая от текущего дня
А можно лди задать с 1 по 31 текущего месяца? Не очень понятен 1й параметр в dateTimeThisMonth
timezoneдля приложения и в php.ini установлен...

 

Powered by ExBB FM 1.0 RC1