[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6EFBBCQSJQSXG6GDETRP28M":3,"skill-same:01M6EFBBCQSJQSXG6GDETRP28M":45},{"skillNo":4,"name":5,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":18,"linkOnly":19,"markdownContent":20,"markdownBody":20,"frontMatter":21,"refName":22,"commitSha":23,"skillDirectory":24,"forksCount":25,"repositoryHtmlUrl":26,"repositoryHomepageUrl":27,"ownerHtmlUrl":28,"ownerBlogUrl":6,"ownerDescription":29,"updatedAt":30,"install":31,"resources":44},"01M6EFBBCQSJQSXG6GDETRP28M","laravel",null,"ComeOnOliver\u002Fskillshub","ComeOnOliver","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F43215937?v=4","01M6E5JNFECJAAVFE0W7SMWWD2","Haoran Shu","01M6E5JNNDQS7AJZDYFQ8TPZCK",67,"MIT","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FTerminalSkills\u002Fskills\u002Flaravel\u002FSKILL.md",[],[5],"2026-11-10 10:12:30",false,"# Laravel — The PHP Framework for Web Artisans\n\nYou are an expert in Laravel, the most popular PHP framework for building web applications and APIs. You help developers build production systems with Eloquent ORM, Blade templating, Artisan CLI, queues, events, middleware, authentication (Sanctum\u002FBreeze), Livewire for reactive UI, and a rich ecosystem of first-party packages — enabling rapid development without sacrificing code quality.\n\n## Core Capabilities\n\n### Eloquent Models\n\n```php\n\u003C?php\n\u002F\u002F app\u002FModels\u002FUser.php\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\HasMany;\nuse Illuminate\\Database\\Eloquent\\SoftDeletes;\nuse Illuminate\\Database\\Eloquent\\Casts\\Attribute;\n\nclass User extends Model\n{\n    use SoftDeletes;\n\n    protected $fillable = ['name', 'email', 'password'];\n    protected $hidden = ['password'];\n    protected $casts = ['email_verified_at' => 'datetime', 'profile' => 'array'];\n\n    public function posts(): HasMany\n    {\n        return $this->hasMany(Post::class);\n    }\n\n    \u002F\u002F Accessor\n    protected function name(): Attribute\n    {\n        return Attribute::make(\n            get: fn (string $value) => ucfirst($value),\n            set: fn (string $value) => strtolower($value),\n        );\n    }\n\n    \u002F\u002F Scope\n    public function scopeActive($query) { return $query->whereNull('deleted_at'); }\n}\n```\n\n### Controllers and Routes\n\n```php\n\u003C?php\n\u002F\u002F app\u002FHttp\u002FControllers\u002FUserController.php\nnamespace App\\Http\\Controllers;\n\nuse App\\Models\\User;\nuse Illuminate\\Http\\Request;\n\nclass UserController extends Controller\n{\n    public function index(Request $request)\n    {\n        return User::query()\n            ->when($request->search, fn ($q, $s) => $q->where('name', 'like', \"%{$s}%\"))\n            ->with('posts')\n            ->paginate(20);\n    }\n\n    public function store(Request $request)\n    {\n        $validated = $request->validate([\n            'name' => 'required|string|max:100',\n            'email' => 'required|email|unique:users',\n            'password' => 'required|min:8',\n        ]);\n\n        $user = User::create([\n            ...$validated,\n            'password' => bcrypt($validated['password']),\n        ]);\n\n        \u002F\u002F Dispatch event\n        event(new UserRegistered($user));\n\n        return response()->json($user, 201);\n    }\n\n    public function show(User $user)\n    {\n        return $user->load(['posts' => fn ($q) => $q->published()->latest()->limit(5)]);\n    }\n}\n```\n\n```php\n\u002F\u002F routes\u002Fapi.php\nRoute::apiResource('users', UserController::class);\nRoute::middleware('auth:sanctum')->group(function () {\n    Route::get('\u002Fprofile', [ProfileController::class, 'show']);\n    Route::put('\u002Fprofile', [ProfileController::class, 'update']);\n});\n```\n\n### Queues\n\n```php\n\u003C?php\n\u002F\u002F app\u002FJobs\u002FProcessOrder.php\nnamespace App\\Jobs;\n\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Illuminate\\Queue\\SerializesModels;\n\nclass ProcessOrder implements ShouldQueue\n{\n    use InteractsWithQueue, Queueable, SerializesModels;\n\n    public int $tries = 3;\n    public int $backoff = 60;\n\n    public function __construct(public Order $order) {}\n\n    public function handle(): void\n    {\n        $this->order->process();\n        Mail::to($this->order->user)->send(new OrderConfirmation($this->order));\n    }\n}\n\n\u002F\u002F Dispatch: ProcessOrder::dispatch($order)->onQueue('orders');\n```\n\n## Installation\n\n```bash\ncomposer create-project laravel\u002Flaravel my-app\ncd my-app\nphp artisan serve                          # Dev server on :8000\nphp artisan make:model User -mfcr         # Model + migration + factory + controller + resource\n```\n\n## Best Practices\n\n1. **Eloquent scopes** — Use query scopes for reusable filters: `User::active()->recent()->get()`\n2. **Form requests** — Extract validation to FormRequest classes; keeps controllers thin\n3. **Eager loading** — Always use `with()` for relations; prevents N+1 queries\n4. **Queues for heavy work** — Dispatch jobs for emails, reports, imports; process with `php artisan queue:work`\n5. **API resources** — Use API Resources for response transformation; controls serialization per endpoint\n6. **Sanctum for auth** — Use Sanctum for SPA\u002Fmobile API auth; simple token-based or cookie-based\n7. **Migrations are immutable** — Never modify existing migrations; create new ones for changes\n8. **Artisan commands** — Create custom commands for maintenance tasks; run via scheduler for cron jobs\n",{},"main","def8531e65114c0fca8fb8551c1871ee0eed705c","skills\u002FTerminalSkills\u002Fskills\u002Flaravel",24,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub","https:\u002F\u002Fskillshub.wtf","https:\u002F\u002Fgithub.com\u002FComeOnOliver","AI & Blockchain Engineer\r\n","2026-06-24 22:07:19",{"source":7,"skillName":5,"commands":32,"prompt":42,"zipAvailable":43},[33,36,39],{"tool":34,"command":35},"npx","npx skills add ComeOnOliver\u002Fskillshub --skill laravel",{"tool":37,"command":38},"bunx","bunx skills add ComeOnOliver\u002Fskillshub --skill laravel",{"tool":40,"command":41},"pnpm","pnpm dlx skills add ComeOnOliver\u002Fskillshub --skill laravel","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FTerminalSkills\u002Fskills\u002Flaravel\u002FSKILL.md",true,[],[46,60,70,79,85,92],{"skillNo":47,"name":48,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":49,"categories":50,"keywords":56,"publishedAt":18},"01M6FKJN13GMG4KY57J3QD8GY5","model-hierarchy-skill","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzscole\u002Fmodel-hierarchy-skill\u002Fmodel-hierarchy-skill\u002FSKILL.md",[51],{"categoryNo":52,"categoryName":53,"taxonomyType":54,"taxonomyTypeDesc":55},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[57,58,59],"model","model hierarchy","model hierarchy skill",{"skillNo":61,"name":62,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":63,"categories":64,"keywords":66,"publishedAt":18},"01M6FKJJJ6GCAMR4PPPRD12M5X","zoom-mcp","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-mcp\u002FSKILL.md",[65],{"categoryNo":52,"categoryName":53,"taxonomyType":54,"taxonomyTypeDesc":55},[67,68,69],"MCP","zoom","zoom mcp",{"skillNo":71,"name":72,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":73,"categories":74,"keywords":75,"publishedAt":18},"01M6FKJE3KYT3KPEZMEEHYKA6K","zoom-apps-sdk","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-apps-sdk\u002FSKILL.md",[],[76,77,78,68],"sdk","zoom apps sdk","apps",{"skillNo":80,"name":81,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":82,"categories":83,"keywords":84,"publishedAt":18},"01M6FKJ9EDH9Q5VWDF8HAJRSP0","windows","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwindows\u002FSKILL.md",[],[81],{"skillNo":86,"name":87,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":88,"categories":89,"keywords":91,"publishedAt":18},"01M6FKJ666BEEFC3AE9GJ72Q93","whiteboard","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwhiteboard\u002FSKILL.md",[90],{"categoryNo":52,"categoryName":53,"taxonomyType":54,"taxonomyTypeDesc":55},[87],{"skillNo":93,"name":94,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":95,"categories":96,"keywords":97,"publishedAt":18},"01M6FKJ21WFCDGTJQ2Q91T9DVW","websockets","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwebsockets\u002FSKILL.md",[],[94]]