OBS: This package was replaced by the MinasORM package.
A small CRUD project developed to assist daily routines and speed up the process of communicating with the database with security and transparency.
Some precautions and step-by-step instructions for you to download and install the package.
To be able to use SimplePHP you will need to have:
PHP ^7.2.5
EXT-PDO *
SimplePHP can be installed via composer.json or via the command terminal:
composer require nicollassilva/SimplePHP
or composer.json:
"nicollassilva/SimplePHP": "^1.9"
>>>>>>> Stashed changes
To configure the connection to the database, you must access: SourceRootConfig.php. Example of the file to be found:
protected $config = [
"driver" => "mysql",
"hostname" => "localhost",
"charset" => "utf8mb4",
"port" => 3306,
"username" => "root",
"password" => "",
"database" => "",
"timezone" => "America/Sao_Paulo",
"pathLog" => __DIR__ . "/../../../../../your-log.log",
"options" => [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_CASE => PDO::CASE_NATURAL,
PDO::ATTR_ORACLE_NULLS => PDO::NULL_EMPTY_STRING
]
];
After completing the database configuration, create a folder at the root of the project where your Models will be and create the class.
namespace Models;
use SimplePHPModelSimplePHP;
class User extends SimplePHP {
function __construct()
{
/**
* @param string Table Name
* @param string Primary Key
*/
parent::__construct('users', 'id');
}
}
After all the previous steps, create an index.php at the root of the project giving a require in the composer autoload and in your model class, after that, instantiate your model and you can start using SimplePHP. Below is an example:
require "vendor/autoload.php";
require "models/user.php";
use ModelsUser;
$userModel = new User();
$user = $userModel->find()->execute();
Fatal error: Uncaught Error: Class 'SimplePHPModelSimplePHP' not found
To fix it, execute the following command in the project's root folder:
composer dump -o
use ModelsUser;
$userModel = new User();
/** find all users */
$user = $userModel->find()->execute();
/** find user by id */
$user = $userModel->find(5)->execute();
/** find users and return the total result count */
$count = $userModel->count()->execute();
/** find user with one where */
$user = $userModel->where([
['name', '=', 'Nicollas']
])->execute();
/** find user with several where. Conditional AND default */
$user = $userModel->where([
['name', '=', 'John'],
['email', '=', '[email protected]']
])->execute();
/** find user with LIKE. Conditional AND default */
$user = $userModel->where([
['name', 'LIKE', '%Guilherme%'],
['email', '=', '[email protected]']
])->execute();
/** find user with conditional where. Condicional OR */
$user = $userModel->where([
['name', 'LIKE', '%Nicollas%'],
['name', 'LIKE', '%Nicolas%']
], 'OR')->execute();
/** find users by name = Nicollas OR name = Nicolas */
$user = $userModel->where([
['name', '=', 'Nicollas']
])
->orWhere([
['name', '=', 'Nicolas']
])->execute();
/** find user using the basic structure query */
$user = $userModel->whereRaw("name = 'Nicollas'")->execute();
/** find users with limit */
$user = $userModel->limit(5)->execute();
/** find users with limit & offset */
$user = $userModel->limit(5)->offset(5)->execute();
/** find users with skip & take | the same as limit & offset */
$user = $userModel->take(5)->skip(5)->execute();
/** find users with orderBy. second parameter optional, default ASC */
$user = $userModel->orderBy('id', 'DESC')->orderBy('name')->execute();
/** find users and return results as attributes. EXAMPLE: $user->name instead of $user['name'] */
$user = $userModel->find()->execute(true);
/** find users with specific columns. */
$user = $userModel->find()->only(['name', 'id', 'email'])->execute();
/** find users creating exceptions in columns. */
$user = $userModel->find(5)->except(['password'])->execute();
/** search in other database table */
$user = (new User())->useTable('posts')->find()->where([['owner_id', '=', $user->id]])->execute();
/** debug query for possible errors | return string */
$user = $userModel->whereRaw("uuid = 'f031b537-672f-4fba-b8a6-af45e778ad93'")->debugQuery();
/** group by method */
$user = $userModel->groupBy('id');
Note: except() method does not work chained with the execute(true) method, only execute() without parameter true.
Note: except() method only works when looking for specific information, in multidimensional arrays it does not work. This will be fixed soon.
All methods are friendly to each other, that means you can make complex queries. Real example:
/** Search for a user's posts varying between the privacy in which it was saved */
/** You can pass false as a fourth argument, the class will understand that you are trying to relate tables and will not put single quotes */
$posts = (new User())->useTable('posts p, users u')
->where([['u.id', '=', $user['id'] ?? $visit['id']],
['u.id', '=', 'p.user_id', false], /** example of the fourth argument for relating tables */
['p.privacity', '<=', isset($privacity) && is_array($privacity) ? 3 : ($visit['url'] != $flag ? 1 : 4)]])
->only(['p.*', 'u.name', 'u.url', 'u.i_profile'])
->limit(10)
->orderBy('p.id')
->execute();
use ModelsUser;
$userModel = new User();
$user = $userModel->find(3)->execute(true);
/** @return null|bool */
if($user->destroy()) {
echo "Success delete!";
}
use ModelsUser;
$userModel = new User();
$user = $userModel->find(5)->execute(true);
$user->name = "Other name";
$user->email = "[email protected]";
/** @return null|bool */
if($user->save()) {
echo "Success!";
}
use ModelsUser;
$userModel = new User();
$user = $userModel->find(8)->only(['id', 'name'])->execute(true);
$user->name = "Russian Gabolev";
$user->email = "[email protected]";
/** This informations was not called from the database, but they exist. */
$user->updated_at = time();
/** @return null|bool */
if($user->save()) {
echo "Success!";
}
use ModelsUser;
$userModel = new User();
$user = $userModel->request([
"name" => "Dr. Haylie Bahringer",
"email" => '[email protected]',
"password" => 123456 // Encrypt before sending to the database
])->create();
It is also possible by passing a direct array:
use ModelsUser;
$userModel = new User();
$_POST = [
"name" => "Hadjei Moccab",
"email" => "[email protected]",
"password" => 123456 // Encrypt before sending to the database
];
$user = $userModel->request($_POST)->create();
use ModelsUser;
$userModel = new User();
$user = $userModel->find(18)->execute(true);
/** @return string | @param string $hash, @param Array $options */
$user->password = $userModel->hashFormat($_POST['password']);
/** @return string | @param string $url */
$user->home = $userModel->urlFormat('Dr. John,Sik!@'); // dr-john-sik
/** @return bool | @param string $email */
if(!$userModel->validateEmail($_POST['email'])) {
echo "Invalid email!";
}
/** @return bool | @param string $pass */
if(!$userModel->validatePassword($_POST['password'])) {
echo "Invalid password!";
}
/** @return bool | @param string $phone */
if(!$userModel->validatePhone($_POST['telephone'])) {
echo "Invalid telephone!";
}
/** @return bool | @param int $size */
$user->recovery_token = $userModel->aleatoryToken(15);
$user->save()
"Pác^kà@gê Sí#mp%lePHP" -> "pac-ka-ge-si-mp-lephp"
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
123456 // false
QUASE123! // false
#OpA1 // false
#essaSenhaEGrande1234 // false
#OpA1? // true
Foi123! // true
(00)0000-0000
(00)00000-0000
0000-0000
00000-0000
When an error is generated by SimplePHP, it will appear in the directory configured in the folder configuration, the report is generated by the monolog package.
This project is licensed under the MIT License - see the LICENSE.md file for details