['name' => 'author_id', 'type' => 'foreignId', 'relation' => [
'model' => 'User', // related model class (default: auto-derived from field name)
'local' => 'author_id', // local key on this table (default: field name)
'foreign' => 'id', // key on the related table (default: id)
]]
public function author(): BelongsTo
{
return $this->belongsTo(User::class, 'author_id', 'id');
}
public function register(): void
{
// @crud-generator:start
$this->app->bind(\App\Contracts\UserServiceInterface::class, \App\Services\UserService::class);
// @crud-generator:end
// your manual bindings go here and are never touched
$this->app->bind(PaymentGatewayInterface::class, StripeGateway::class);
}
'generate_php_docs' => true,
/** @return AnonymousResourceCollection */
public function index(): AnonymousResourceCollection { ... }
/** @return UserResource */
public function show(User $user): UserResource { ... }
/** @return Response */
public function destroy(User $user): Response { ... }
/** @return LengthAwarePaginator */
public function index(): \Illuminate\Contracts\Pagination\LengthAwarePaginator { ... }
/** @return User */
public function store(array $data): User { ... }
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Vendor\LaravelAttributeCodeGenerators\Attributes\Action;
use Vendor\LaravelAttributeCodeGenerators\Attributes\BackedEnum;
use Vendor\LaravelAttributeCodeGenerators\Attributes\Crud;
use Vendor\LaravelAttributeCodeGenerators\Attributes\DTO;
use Vendor\LaravelAttributeCodeGenerators\Attributes\Factory;
use Vendor\LaravelAttributeCodeGenerators\Attributes\GenerateTest;
use Vendor\LaravelAttributeCodeGenerators\Attributes\Observer;
use Vendor\LaravelAttributeCodeGenerators\Attributes\Policy;
use Vendor\LaravelAttributeCodeGenerators\Attributes\Repository;
use Vendor\LaravelAttributeCodeGenerators\Attributes\Resource;
use Vendor\LaravelAttributeCodeGenerators\Attributes\Route;
use Vendor\LaravelAttributeCodeGenerators\Attributes\Seeder;
use Vendor\LaravelAttributeCodeGenerators\Attributes\Service;
use Vendor\LaravelAttributeCodeGenerators\Attributes\UseSoftDeletes;
use Vendor\LaravelAttributeCodeGenerators\Attributes\ValidateFromMigration;
#[Crud(methods: ['index', 'store', 'show', 'update', 'destroy'])]
#[Route(path: 'users', middleware: ['auth:sanctum'])]
#[Resource(fields: ['id', 'name', 'email'])]
#[Service(interface: true)]
#[Repository(interface: true)]
#[Policy]
#[ValidateFromMigration]
#[DTO]
#[UseSoftDeletes]
#[BackedEnum(field: 'status', values: ['active', 'inactive'])]
#[Observer]
#[Action]
#[Factory]
#[Seeder(count: 20)]
#[GenerateTest]
class User extends Model
{
public function fields(): array
{
return [
['type' => 'id'],
['name' => 'name', 'type' => 'string'],
['name' => 'email', 'type' => 'string', 'unique' => true],
['name' => 'bio', 'type' => 'text', 'nullable' => true],
['name' => 'password', 'type' => 'string', 'hidden' => true],
['name' => 'team_id', 'type' => 'foreignId', 'relation' => [
'model' => 'Team',
]],
['type' => 'timestamps'],
];
}
}