1. Go to this page and download the library: Download escolalms/model-fields 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/ */
escolalms / model-fields example snippets
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
protected $table = 'users';
protected $fillable = ['first_name', 'last_name', 'email'];
protected $appends = ['foo'];
public function getFooAttribute()
{
return 'bar';
}
}
use EscolaLms\ModelFields\Models\Model;
class User extends Model
{
protected $table = 'users';
protected $fillable = ['first_name', 'last_name', 'email'];
protected $appends = ['foo'];
public function getFooAttribute()
{
return 'bar';
}
}
use Illuminate\Database\Eloquent\Model;
use EscolaLms\ModelFields\Traits\ModelFields;
class User extends Model
{
use ModelFields;
protected $table = 'users';
protected $fillable = ['first_name', 'last_name', 'email'];
protected $appends = ['foo'];
public function getFooAttribute()
{
return 'bar';
}
}
}
use EscolaLms\ModelFields\Facades\ModelFields;
ModelFields::addOrUpdateMetadataField(
User::class, // Model class that we want to extents
'description', // name of new field
'text', // type of new field
'lorem ipsum', // default value
['
use EscolaLms\ModelFields\Models\Metadata;
public function addOrUpdateMetadataField(string $class_type, string $name, string $type, string $default = '', array $rules = null, $visibility = 1 << 0): Metadata;
$extraAttributes = [
'description' => 'to be or not to be',
];
$user = User::create(array_merge([
'first_name' => 'John',
'last_name' => 'Deo',
'email' => '[email protected]',
], $extraAttributes));
$user = User::find($user->id);
assert($user->description === $extraAttributes['description']);
$extraAttributes = [
'description' => 'aaa',
'interested_in_tests' => false,
'aaaa' => 'aaaa', // this will not be saved as is neither in model attributes nor in extra fields
'consents' => ['consent1' => true, 'consent2' => false]
];
$user = User::create(array_merge([
'first_name' => 'aaa',
'last_name' => 'aaa',
'email' => '[email protected]',
], $extraAttributes));
$user->fill(['a' => 'nb']); // this will not be saved as is neither in model attributes nor in extra fields
$user = User::find($user->id); // fetch user from database
assert($user->description === $extraAttributes['description']);
assert($user->interested_in_tests === $extraAttributes['interested_in_tests']);
assert($user->consents === $extraAttributes['consents']);
assert($user->aaaa === null);
$user->description = 'abc';
$user->interested_in_tests = true;
$user->save();
$user = User::find($user->id); // fetch user from database
assert($user->description === 'abc');
assert($user->interested_in_tests === true);
$user->update([
'description' => 'zzz',
'interested_in_tests' => false
]);
$user = User::find($user->id); // fetch user from database
assert($user->description === 'zzz');
assert($user->interested_in_tests === false);
namespace EscolaLms\ModelFields\Tests\Http\Resources;
use Illuminate\Http\Resources\Json\JsonResource;
use EscolaLms\ModelFields\Tests\Models\User;
use EscolaLms\ModelFields\Facades\ModelFields;
use EscolaLms\ModelFields\Enum\MetaFieldVisibilityEnum;
class UserResource extends JsonResource
{
public function __construct(User $user)
{
$this->user = $user;
}
public function toArray($request)
{
return [
'id' => $this->user->id,
'first_name' => $this->user->first_name,
'last_name' => $this->user->last_name,
'email' => $this->user->email,
...ModelFields::getExtraAttributesValues($this->user, MetaFieldVisibilityEnum::PUBLIC) // MetaFieldVisibilityEnum::PUBLIC === 1
];
}
}
use EscolaLms\ModelFields\Facades\ModelFields;
use EscolaLms\ModelFields\Facades\ModelFields;
ModelFields::addOrUpdateMetadataField(
User::class,
'title',
'varchar',
'',
['
namespace EscolaLms\ModelFields\Tests\Http\Resources;
use Illuminate\Http\Resources\Json\JsonResource;
use EscolaLms\ModelFields\Tests\Models\User;
use EscolaLms\ModelFields\Facades\ModelFields;
use EscolaLms\ModelFields\Enum\MetaFieldVisibilityEnum;
class UserResource extends JsonResource
{
public function __construct(User $user)
{
$this->user = $user;
}
public function toArray($request)
{
return [
'first_name' => $this->user->first_name,
'last_name' => $this->user->last_name,
'email' => $this->user->email,
...ModelFields::getExtraAttributesValues($this->user, MetaFieldVisibilityEnum::PUBLIC)
];
}
}
namespace EscolaLms\ModelFields\Tests\Http\Resources;
use Illuminate\Http\Resources\Json\JsonResource;
use EscolaLms\ModelFields\Tests\Models\User;
use EscolaLms\ModelFields\Facades\ModelFields;
use EscolaLms\ModelFields\Enum\MetaFieldVisibilityEnum;
class UserAdminResource extends JsonResource
{
public function __construct(User $user)
{
$this->user = $user;
}
public function toArray($request)
{
return [
'id' => $this->user->id,
'first_name' => $this->user->first_name,
'last_name' => $this->user->last_name,
'email' => $this->user->email,
...ModelFields::getExtraAttributesValues($this->user, MetaFieldVisibilityEnum::ADMIN | MetaFieldVisibilityEnum::PUBLIC)
];
}
}
namespace EscolaLms\ModelFields\Tests\Http\Requests;
use EscolaLms\ModelFields\Tests\Models\User;
use Illuminate\Foundation\Http\FormRequest;
use EscolaLms\ModelFields\Facades\ModelFields;
class UserCreateRequest extends FormRequest
{
/**
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'first_name' => ['