PHP code example of stratadox / table-loader
1. Go to this page and download the library: Download stratadox/table-loader library . Choose the download type require .
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once ('vendor/autoload.php' );
stratadox / table-loader example snippets
$data = table([
[ 'id' , 'name' ],
[ 1 , 'foo' ],
[ 2 , 'bar' ],
]);
$make = SimpleTable::converter(
'thing' ,
SimpleHydrator::forThe(Thing::class),
Identified::by('id' )
);
$things = $make->from($data)['thing' ];
assert($things['1' ]->equals(new Thing(1 , 'foo' )));
assert($things['2' ]->equals(new Thing(2 , 'bar' )));
function table (array $table) : array
{
$keys = array_shift($table);
$result = [];
foreach ($table as $row) {
$result[] = array_combine($keys, $row);
}
return $result;
}
$data = table([
[ 'club_id' , 'club_name' , 'member_id' , 'member_name' ],
[ 1 , 'Kick-ass Club' , 1 , 'Chuck Norris' ],
[ 1 , 'Kick-ass Club' , 2 , 'Jackie Chan' ],
[ 2 , 'The Foo Bar' , 1 , 'Chuck Norris' ],
[ 2 , 'The Foo Bar' , 3 , 'John Doe' ],
[ 3 , 'Space Club' , 4 , 'Captain Kirk' ],
[ 3 , 'Space Club' , 5 , 'Darth Vader' ],
]);
$make = Joined::table(
Load::each('club' )
->as(Club::class, ['name' => Is::string()])
->havingMany('memberList' , 'member' , MemberList::class),
Load::each('member' )
->as(Member::class, ['name' => Is::string()])
)();
$actualClubs = $make->from($data)['club' ];
$chuckNorris = Member::named('Chuck Norris' );
$expectedClubs = [
'1' => Club::establishedBy($chuckNorris, 'Kick-ass Club' ),
'2' => Club::establishedBy($chuckNorris, 'The Foo Bar' ),
'3' => Club::establishedBy(Member::named('Captain Kirk' ), 'Space Club' ),
];
Member::named('Jackie Chan' )->join($expectedClubs['1' ]);
Member::named('John Doe' )->join($expectedClubs['2' ]);
Member::named('Darth Vader' )->join($expectedClubs['3' ]);
assert($expectedClubs == $actualClubs);
$data = table([
[ 'student_first_name' , 'student_last_name' , 'book_name' ],
[ 'Alice' , 'of Wonderland' , 'Catching rabbits' ],
[ 'Alice' , 'of Wonderland' , 'Hacking 101' ],
[ 'Bob' , 'the Builder' , 'Toolset maintenance' ],
]);
$make = Joined::table(
Load::each('student' )
->by('first_name' , 'last_name' )
->as(Student::class, [
'name' => Has::one(Name::class)
->with('firstName' , In::key('first_name' ))
->with('lastName' , In::key('last_name' ))
])
->havingMany('books' , 'book' ),
Load::each('book' )
->by('name' )
->as(Book::class)
->havingOne('owner' , 'student' )
)();
$objects = $make->from($data);
$student = $objects['student' ];
$book = $objects['book' ];
assert($student['Alice:of Wonderland' ]->hasThe($book['Catching rabbits' ]));
assert($book['Catching rabbits' ]->isOwnedBy($student['Alice:of Wonderland' ]));
assert($student['Bob:the Builder' ]->hasThe($book['Toolset maintenance' ]));
assert($book['Toolset maintenance' ]->isOwnedBy($student['Bob:the Builder' ]));
assert($student['Alice:of Wonderland' ]->name() instanceof Name);
assert('Alice of Wonderland' === (string) $student['Alice:of Wonderland' ]->name());
$data = table([
[ 'student_name' , 'course_name' ],
[ 'Alice' , 'Catching rabbits' ],
[ 'Alice' , 'Hacking 101' ],
[ 'Bob' , 'Toolset maintenance' ],
[ 'Bob' , 'Hacking 101' ],
]);
$make = Joined::table(
Load::each('student' )
->by('name' )
->as(Student::class)
->havingMany('courses' , 'course' , Courses::class),
Load::each('course' )
->by('name' )
->as(Course::class)
->havingMany('subscribedStudents' , 'student' , Students::class)
)();
$objects = $make->from($data);
$student = $objects['student' ];
$course = $objects['course' ];
assert($student['Alice' ]->follows($course['Catching rabbits' ]));
assert($student['Alice' ]->follows($course['Hacking 101' ]));
assert($student['Alice' ]->doesNotFollow($course['Toolset maintenance' ]));
assert($student['Bob' ]->doesNotFollow($course['Catching rabbits' ]));
assert($student['Bob' ]->follows($course['Hacking 101' ]));
assert($student['Bob' ]->follows($course['Toolset maintenance' ]));
assert(count($course['Catching rabbits' ]->subscribedStudents()) === 1 );
assert(count($course['Hacking 101' ]->subscribedStudents()) === 2 );
assert(count($course['Toolset maintenance' ]->subscribedStudents()) === 1 );
$data = table([
['firm_name' , 'lawyer_name' , 'client_name' , 'client_value' ],
['The Firm' , 'Alice' , 'John Doe' , 10000 ],
['The Firm' , 'Bob' , 'Jackie Chan' , 56557853526 ],
['The Firm' , 'Alice' , 'Chuck Norris' , 9999999999999 ],
['The Firm' , 'Bob' , 'Alfred' , 845478 ],
['Law & Co' , 'Charlie' , 'Slender Man' , 95647467 ],
['The Firm' , 'Alice' , 'Foo Bar' , 365667 ],
['Law & Co' , 'Charlie' , 'John Cena' , 4697669670 ],
]);
$make = Joined::table(
Load::each('firm' )->by('name' )->as(Firm::class)->havingMany('lawyers' , 'lawyer' ),
Load::each('lawyer' )->by('name' )->as(Lawyer::class)->havingMany('clients' , 'client' ),
Load::each('client' )->by('name' )->as(Client::class)
)();
$firms = $make->from($data)['firm' ];
$theFirm = $firms['The Firm' ];
$lawAndCo = $firms['Law & Co' ];
[$alice, $bob] = $theFirm->lawyers();
[$charlie] = $lawAndCo->lawyers();
assert(3 == count($alice->clients()));
assert(2 == count($bob->clients()));
assert(2 == count($charlie->clients()));