Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: factory-цикл с внешними переменнами

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
mstdmstd
Отправлено: 05 Марта, 2018 - 14:20:58
Post Id


Частый гость


Покинул форум
Сообщений всего: 170
Дата рег-ции: Авг. 2014  


Помог: 0 раз(а)




Привет,
На 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 - но есть ли лучше варианты?

Спасибо!
 
 Top
Мелкий Супермодератор
Отправлено: 05 Марта, 2018 - 14:56:08
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




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


-----
PostgreSQL DBA
 
 Top
mstdmstd
Отправлено: 05 Марта, 2018 - 15:39:57
Post Id


Частый гость


Покинул форум
Сообщений всего: 170
Дата рег-ции: Авг. 2014  


Помог: 0 раз(а)




Спасибо, про эту возможность я в курсе, хотя и не пользовал практически.
Не очень понятно как это применимо к моему случаю.
Можно ли набросок синтаксиса ?
 
 Top
mstdmstd
Отправлено: 06 Марта, 2018 - 15:15:46
Post Id


Частый гость


Покинул форум
Сообщений всего: 170
Дата рег-ции: Авг. 2014  


Помог: 0 раз(а)




Спасибо за наводку : немного подумав у меня получился метод :

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 установлен...
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« CMS и фреймворки »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB