1. Go to this page and download the library: Download anexia/laravel-basemodel 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');
/* Start to develop here. Best regards https://php-download.com/ */
anexia / laravel-basemodel example snippets
// auth model class app/User.php
namespace App;
use Anexia\BaseModel\Interfaces\BaseModelInterface;
use Anexia\BaseModel\Traits\BaseModelTrait;
use Illuminate\Auth\Authenticatable;
use Illuminate\Auth\Passwords\CanResetPassword;
use Illuminate\Contracts\Auth\Access\Authorizable as AuthorizableContract;
use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract;
use Illuminate\Contracts\Auth\CanResetPassword as CanResetPasswordContract;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Foundation\Auth\Access\Authorizable;
class User extends Model implements BaseModelInterface,
AuthenticatableContract,
AuthorizableContract,
CanResetPasswordContract
{
use Authenticatable, Authorizable, CanResetPassword, BaseModelTrait;
...
}
// from model class app/Post.php
$fillable = ['name', 'type', 'author_id'];
// $guarded / etc.
public function author()
{
return $this->belongsTo(User::class, 'author_id');
}
/**
* @param boolean|false $list
* @return array
*/
public static function getRelationships($list = false)
{
if ($list) {
return [
'author' => User::class
];
}
// return something else for $list = false
}
}
// from model class app/Post.php
$fillable = ['name', 'type', 'author_id'];
// $guarded / etc.
public function author()
{
return $this->belongsTo(User::class, 'author_id');
}
public function comments()
{
return $this->hasMany(Comment::class);
}
/**
* @param boolean|false $list
* @return array
*/
public static function getRelationships($list = false)
{
if ($list) {
// return list
}
return [
'one' => [
'author' => [
'model' => User::class,
'inverse' => 'posts',
'editable' => false, // true by default
'nullable' => false // true by default
]
],
'many' => [
'comments' => [
'model' => Comment::class,
'inverse' => 'post'
]
]
];
}
}
// from model class app/Post.php
$fillable = ['name', 'type', 'author_id'];
/**
* @param bool|true $checkCompletion
* @return array
*/
public static function getValidationRules($checkCompletion = true)
{
if ($checkCompletion) {
return [
'name' => '
// model class app/Post.php
namespace App;
use Anexia\BaseModel\Interfaces\BaseModelInterface;
use Anexia\BaseModel\Traits\BaseModelTrait;
use Illuminate\Database\Eloquent\Model;
class Post extends Model implements BaseModelInterface
{
use BaseModelTrait;
$fillable = ['name', 'type'];
// $guarded / etc.
/**
* @param Model|null $currentUser
* @return array
*/
public static function getDefaults(Model $currentUser = null)
{
return [
'type' => 'blog'
];
}
}
// model class app/Post.php
namespace App;
use Anexia\BaseModel\Interfaces\BaseModelInterface;
use Anexia\BaseModel\Traits\BaseModelTrait;
use Illuminate\Database\Eloquent\Model;
class Post extends Model implements BaseModelInterface
{
use BaseModelTrait;
$fillable = ['name'];
// $guarded / etc.
public function comments()
{
return $this->hasMany(Comment::class);
}
/**
* @param boolean|false $list
* @return array
*/
public static function getRelationships($list = false)
{
if ($list) {
return [
'comments' => Comment::class
];
}
return [
'many' => [
'comments' => [
'model' => Comment::class, // related model's class
'inverse' => 'post', // name of the relation within the related model
'editable' => true, // true by default
'nullable' => true // true by default
]
]
];
}
}
// model class app/Comment.php
namespace App;
use Anexia\BaseModel\Interfaces\BaseModelInterface;
use Anexia\BaseModel\Traits\BaseModelTrait;
use Illuminate\Database\Eloquent\Model;
class Comment extends Model implements BaseModelInterface
{
use BaseModelTrait;
$fillable = ['text];
// $guarded / etc.
public function post()
{
return $this->belongsTo(Post::class);
}
/**
* @param boolean|false $list
* @return array
*/
public static function getRelationships($list = false)
{
if ($list) {
return [
'post' => Post::class
];
}
return [
'one' => [
'post' => [
'model' => Post::class,
'inverse' => 'comments',
'editable' => false,
'nullable' => false
]
]
];
}
}
// model class app/Post.php
namespace App;
use Anexia\BaseModel\Interfaces\BaseModelInterface;
use Anexia\BaseModel\Traits\BaseModelTrait;
use Illuminate\Database\Eloquent\Model;
class Post extends Model implements BaseModelInterface
{
use BaseModelTrait;
$fillable = ['name', 'type'];
...
/**
* @return array
*/
public static function getDefaultSorting()
{
return [
'name' => 'ASC'
];
}
}
/**
* @return array
*/
public static function getDefaultSorting()
{
return [
'name' => 'ASC',
'type' => 'DESC'
];
}
// model class app/Post.php
namespace App;
use Anexia\BaseModel\Interfaces\BaseModelInterface;
use Anexia\BaseModel\Traits\BaseModelTrait;
use Illuminate\Database\Eloquent\Model;
class Post extends Model implements BaseModelInterface
{
use BaseModelTrait;
$fillable = ['name', 'type'];
...
/**
* @return array
*/
public static function getDefaultSearch()
{
return [
'name',
'type'
];
}
}
namespace Tests\Unit\Models;
use Anexia\BaseModel\Tests\Unit\Models\BaseModelTestCase;
use App\User;
class PostTest extends BaseModelTestCase
{
/**
* @param int $userId
*/
protected function mockLogin($userId = 1)
{
// mock the user of request()->user()
$this->be($this->getUser($userId));
$this->call('GET', 'login');
}
/**
* @param int $id
* @return User|null
*/
public function getUser($id = 1)
{
return User::find($id);
}
}
namespace Tests\Feature\Controllers;
use Anexia\BaseModel\ExtendedModelParameters;
use Anexia\BaseModel\Tests\Feature\Controllers\RestControllerTestCase;
use App\Post;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Lang;
class PostControllerTest extends RestControllerTestCase
{
/** string */
const API_ROUTE = '/api/v1';
/**
* Test read list
*
* @return void
*/
public function testReadPostList()
{
$response = $this->get(self::API_ROUTE . '/posts');
$response->assertStatus(200);
$body = json_decode($response->getContent(), true);
$this->assertArrayHasKey('data', $body);
$data = $body['data'];
$this->assertInternalType('array', $data);
$extendedParameters = new ExtendedModelParameters();
$extendedParameters->setIncludes([
// OR connected conditions
[
// AND connected conditions
'therapist_id' => null,
'unit_id' => null
],
'therapist_id' => $this->currentUser->id,
'unit.therapy.therapist_id' => $this->currentUser->id
]);
$posts = Post::allExtended($extendedParameters);
// add pagination checks
$this->runPaginationTests($body, $posts->count());
}
}
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.