You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

144 lines
4.6 KiB

<?php
use App\Business;
use App\User;
use App\Project;
use App\System;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Database\Seeder;
use Illuminate\Support\Arr;
use Illuminate\Support\Facades\DB;
class BusinessSeeder extends Seeder
{
public function run()
{
Business::insert(factory(Business::class, 2000)->raw());
$projects = [];
$systems = [];
$business_user = [];
$project_user = [];
$project_id = 0;
for ($business_id=1; $business_id <= 2000; $business_id++) {
// distinct user ids
$user_ids = [];
$added_user = [];
for ($i=0; $i < 10; $i++) $user_ids [] = rand(1, 5000);
$user_ids = array_values(array_unique($user_ids));
// add 1 to 7 member
for ($i=0; $i < rand(1, 8); $i++) {
$added_user[] = $user_ids[$i];
$business_user[] = [
'business_id' => $business_id,
'user_id' => $user_ids[$i],
'level' => $i == 0? 4: rand(0, 4),
];
}
$business_projects = factory(Project::class, rand(1, 3))->raw();
foreach ($business_projects as $project) {
$project['business_id'] = $business_id;
$projects[] = $project;
$project_id++;
for ($i=0; $i < rand(0, 2); $i++) {
if ($added_user[$i] ?? false) {
$project_user[] = [
'project_id' => $project_id,
'user_id' => $added_user[$i],
'level' => rand(0, 4),
];
}
}
for ($i=0; $i < rand(1, 5); $i++) {
$systems[] = factory(System::class)->raw([
'project_id' => $project_id,
'business_id' => $business_id,
]);
}
}
// for ($i=0; $i < rand(1, 3); $i++) {
// // $project =
// }
// $business_user[] = [
// 'business_id' => $business_id,
// 'user_id' => 1,
// 'owner' => true,
// ];
}
DB::table('business_user')->insert($business_user);
Project::insert($projects);
DB::table('project_user')->insert($project_user);
DB::table('systems')->insert($systems);
/**
* Every business has one or more owners, which might be the owner of other business as well
*/
// $this->insertAdmins($business_ids, $owners);
/**
* Every business has one or more members, which might be the member of other business as well
*/
// $this->insertMembers($business_ids);
}
/**
* @param $business_ids
* @param Collection $owners
* @return array
*/
public function insertAdmins($business_ids, Collection $owners)
{
$relations = [];
foreach ($business_ids as $id) {
$relations[] = [
'business_id' => $id,
'user_id' => $owners->random()->id,
'owner' => true,
];
}
// Specify the percentage of managers who have two or more businesses
$multiple = ceil(count($relations) / 100 * 30);
foreach (Arr::random($relations, $multiple) as $relation) {
$relations[] = [
'business_id' => $relation['business_id'],
'user_id' => $owners->except($relation['user_id'])->random()->id,
'owner' => true,
];
}
DB::table('business_user')->insert($relations);
}
/**
* @param $business_ids
*/
public function insertMembers($business_ids): void
{
/** @var Collection $member_ids */
$member_ids = User::whereDoesntHave('businesses')->select('id')->pluck('id');
$relations = [];
$current = [];
foreach ($member_ids as $index => $id) {
$relations[] = [
'business_id' => $business = $business_ids->random(),
'user_id' => $id,
];
$current[$business][] = $index;
}
$multiple = ceil(count($relations) / 100 * 20);
foreach (Arr::random($relations, $multiple) as $relation) {
$relations[] = [
'business_id' => $relation['business_id'],
'user_id' => $member_ids->except($current[$relation['business_id']])->random(),
];
}
DB::table('business_user')->insert($relations);
}
}