updated and simplified examples

This commit is contained in:
Joby 2020-08-29 15:54:37 -06:00
parent 0d1677a9b4
commit 110c11dbb2
5 changed files with 70 additions and 179 deletions

View file

@ -2,30 +2,33 @@
use Destructr\Factory;
class ExampleFactory extends Factory {
class ExampleFactory extends Factory
{
/**
* Example factory with a different schema, to index on random_data, but not
* by dso_type.
*
* Also uses a different column name for dso.id
* Example factory with a different schema, to index on random_data for faster searching
*/
protected $schema = [
'dso.id' => [
'name'=>'dso_id_other_name',
'type'=>'VARCHAR(16)',
'name' => 'dso_id', //column name to be used
'type' => 'VARCHAR(16)', //column type
'index' => 'BTREE', //whether/how to index
'unique' => true, //whether column should be unique
'primary' => true, //whether column should be the primary key
],
'dso.type' => [
'name' => 'dso_type',
'type' => 'VARCHAR(30)',
'index' => 'BTREE',
'unique' => true,
'primary' => true
],
'dso.deleted' => [
'name'=>'dso_deleted',
'type'=>'INT',
'index'=>'BTREE'
'name' => 'dso_deleted',
'type' => 'BIGINT',
'index' => 'BTREE',
],
'random_data' => [
'name'=>'random_data',
'type'=>'VARCHAR(100)',
'index'=>'BTREE'
]
'name' => 'random_data',
'type' => 'VARCHAR(64)',
'index' => 'BTREE',
],
];
}
}

50
examples/example_use.php Normal file
View file

@ -0,0 +1,50 @@
<?php
/**
* This file demonstrates some basic uses of Destructr, from the creation
* of a connection and factory, through to creating, inserting, updating,
* deleting, and querying data.
*/
include __DIR__ . '/../vendor/autoload.php';
/*
SQLite drivers can be created by the default factory.
A charset of UTF8 should be specified, to avoid character encoding
issues.
*/
$driver = \Destructr\DriverFactory::factory(
'sqlite:' . __DIR__ . '/example.sqlite'
);
/*
Creates a factory using the table 'example_table', and creates
the necessary table. Note that prepareEnvironment() can safely be called
multiple times. updateEnvironment shouldn't be used this way in production,
as if it is called more than once per second during a schema change, errors
may be introduced.
*/
include __DIR__ . '/example_factory.php';
$factory = new ExampleFactory($driver, 'example_table');
$factory->prepareEnvironment();
$factory->updateEnvironment();
/*
Inserting a record
*/
$obj = $factory->create(
[
'dso.type'=>'foobar',
'random_data' => md5(rand())
]
);
$obj->insert();
/*
Search by random data field, which is indexed due to the
ExampleFactory class' $schema property.
*/
$search = $factory->search();
$search->where('${random_data} LIKE :q');
$result = $search->execute(['q'=>'ab%']);
foreach($result as $r) {
var_dump($r->get());
}

View file

@ -1,52 +0,0 @@
<?php
include __DIR__ . '/../vendor/autoload.php';
/*
Constructing MariaDB drivers should be done using factoryFromPDO,
so that they use the MariaDB driver instead of the MySQL driver.
*/
$driver = \Destructr\DriverFactory::factoryFromPDO(
new \PDO(
'mysql:server=localhost;port=3307;dbname=destructr',
'root'
),
'mariadb'
);
/*
Creates a factory using the table 'example_table', and creates
the necessary table. Note that prepareEnvironment() can safely be called
multiple times.
*/
include __DIR__ . '/example_factory.php';
$factory = new ExampleFactory($driver, 'example_table');
$factory->prepareEnvironment();
$factory->updateEnvironment();
/*
The following can be uncommented to insert dummy records
into the given table.
*/
// for($i = 0; $i < 10; $i++) {
// $obj = $factory->create(
// [
// 'dso.type'=>'foobar',
// 'random_data' => md5(rand())
// ]
// );
// $obj->insert();
// }
/*
Search by random data field
*/
$search = $factory->search();
$search->where('${random_data} = :q');
$result = $search->execute(['q'=>'rw7nivub9bhhh3t4']);
/*
Search by dso.id, which is much faster because it's indexed
*/
// $search = $factory->search();
// $search->where('${dso.id} = :q');
// $result = $search->execute(['q'=>'rw7nivub9bhhh3t4']);

View file

@ -1,52 +0,0 @@
<?php
use Destructr\Factory;
include __DIR__ . '/../vendor/autoload.php';
/*
Constructing MariaDB drivers should be done using factoryFromPDO,
so that they use the MariaDB driver instead of the MySQL driver.
*/
$driver = \Destructr\DriverFactory::factory(
'mysql:server=localhost;port=3306;dbname=destructr',
'root'
);
/*
Creates a factory using the table 'example_table', and creates
the necessary table. Note that prepareEnvironment() can safely be called
multiple times.
*/
include __DIR__ . '/example_factory.php';
$factory = new Factory($driver, 'example_table');
$factory->prepareEnvironment();
$factory->updateEnvironment();
/*
The following can be uncommented to insert dummy records
into the given table.
*/
// for($i = 0; $i < 100; $i++) {
// $obj = $factory->create(
// [
// 'dso.type'=>'foobar',
// 'random_data' => md5(rand())
// ]
// );
// $obj->insert();
// }
/*
Search by random data field
*/
// $search = $factory->search();
// $search->where('${random_data} = :q');
// $result = $search->execute(['q'=>'rw7nivub9bhhh3t4']);
/*
Search by dso.id, which is much faster because it's indexed
*/
// $search = $factory->search();
// $search->where('${dso.id} = :q');
// $result = $search->execute(['q'=>'rw7nivub9bhhh3t4']);

View file

@ -1,58 +0,0 @@
<?php
use Destructr\Factory;
include __DIR__ . '/../vendor/autoload.php';
/*
SQLite drivers can be created by the default factory.
A charset of UTF8 should be specified, to avoid character encoding
issues.
*/
$driver = \Destructr\DriverFactory::factory(
'sqlite:' . __DIR__ . '/example.sqlite'
);
/*
Creates a factory using the table 'example_table', and creates
the necessary table. Note that prepareEnvironment() can safely be called
multiple times.
*/
include __DIR__ . '/example_factory.php';
$factory = new Factory($driver, 'example_table');
$factory->prepareEnvironment();
$factory->updateEnvironment();
/*
The following can be uncommented to insert dummy records
into the given table.
*/
// ini_set('max_execution_time','0');
// for($i = 0; $i < 10; $i++) {
// $obj = $factory->create(
// [
// 'dso.type'=>'foobar',
// 'random_data' => md5(rand())
// ]
// );
// $obj->insert();
// }
/*
Search by random data field
*/
$search = $factory->search();
$search->where('${random_data} LIKE :q');
$result = $search->execute(['q'=>'%ab%']);
foreach($result as $r) {
var_dump($r->get());
$r['random_data_2'] = md5(rand());
$r->update();
}
/*
Search by dso.id, which is much faster because it's indexed
*/
// $search = $factory->search();
// $search->where('${dso.id} = :q');
// $result = $search->execute(['q'=>'rw7nivub9bhhh3t4']);