Skillshub laravel-prompting-patterns

Laravel Prompting Patterns

install
source · Clone the upstream repo
git clone https://github.com/ComeOnOliver/skillshub
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/ComeOnOliver/skillshub "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/noartem/skills/laravel-prompting-patterns" ~/.claude/skills/comeonoliver-skillshub-laravel-prompting-patterns && rm -rf "$T"
manifest: skills/noartem/skills/laravel-prompting-patterns/SKILL.md
source content

Laravel Prompting Patterns

Use Laravel's vocabulary to get idiomatic code. Generic requests produce generic solutions that don't leverage the framework.

Database Operations

Generic

"Get all active users with their posts"

Laravel-Specific

"Query active users with eager-loaded posts using Eloquent:

User::where('active', true)
    ->with('posts')
    ->get();

Add a scope to User model:

scopeActive($query)
"

Relationships

"Set up a many-to-many relationship between Posts and Tags:

  • Create
    post_tag
    pivot table migration
  • Add
    belongsToMany
    in Post model
  • Add
    belongsToMany
    in Tag model
  • Use
    attach()
    ,
    detach()
    ,
    sync()
    for management"

Query Optimization

"Avoid N+1 on the posts index:

  • Eager load
    author
    and
    category
    relationships
  • Use
    withCount('comments')
    for comment totals
  • Add database indexes on
    published_at
    and
    category_id
    "

Validation

Generic

"Validate the user input"

Laravel-Specific

"Create UserStoreRequest with validation rules:

public function rules(): array
{
    return [
        'email' => ['required', 'email', 'unique:users,email'],
        'password' => ['required', 'min:12', Password::defaults()],
        'name' => ['required', 'string', 'max:255'],
    ];
}

Add custom error messages in

messages()
method"

Complex Validation

"Validate order creation:

  • Use
    Rule::exists('products', 'id')
    for product IDs
  • Validate nested items array:
    items.*.quantity
    must be integer, min 1
  • Use
    Rule::requiredIf()
    for conditional shipping address
  • Add custom rule for inventory check:
    new HasSufficientStock
    "

API Endpoints

Generic

"Create an API for products"

Laravel-Specific

"Create RESTful product API:

  • Resource controller:
    ProductController
    with apiResource routes
  • Use
    ProductResource
    for response transformation
  • Add
    ProductCollection
    for index endpoint with pagination
  • Protect with Sanctum middleware:
    auth:sanctum
  • Return 201 on create, 204 on delete
  • Use
    ProductStoreRequest
    and
    ProductUpdateRequest
    for validation"

Pagination

"Paginate products API:

  • Use
    Product::paginate(20)
    in controller
  • Return with
    ProductResource::collection($products)
  • Include meta:
    total
    ,
    per_page
    ,
    current_page
    ,
    last_page
  • Support
    ?page=2
    query parameter"

Filtering

"Add filtering to products API:

  • Accept
    ?category=electronics&min_price=100
    query params
  • Use
    when()
    for conditional queries
  • Extract to
    ProductFilters
    class for reusability
  • Document query params in API docs"

Background Processing

Generic

"Send email after user registers"

Laravel-Specific

"Dispatch SendWelcomeEmail job after registration:

SendWelcomeEmail::dispatch($user)
    ->onQueue('emails')
    ->delay(now()->addMinutes(5));
  • Implement
    ShouldQueue
    interface
  • Add
    $tries = 3
    and
    $timeout = 30
  • Handle failure in
    failed()
    method
  • Tag job for Horizon:
    $tags = ['user:'.$user->id]
    "

Queue Configuration

"Configure queue for payment processing:

  • Use
    redis
    connection for payments queue
  • Set
    queue:work --queue=payments,default
  • Add
    retry_after
    to 90 seconds in config
  • Monitor with Horizon dashboard"

Job Chaining

"Process order with job chain:

Bus::chain([
    new ValidateInventory($order),
    new ChargePayment($order),
    new SendConfirmation($order),
])->dispatch();

If any job fails, chain stops. Handle in

catch()
callback."

Referencing Documentation

Effective References

"Implement according to Laravel's Eloquent Relationships docs"

"Follow Laravel's Form Request Validation pattern"

"Use Laravel's API Resource pattern for response transformation"

"Configure queues per Laravel Queue docs"

Pattern Catalog

Models & Eloquent:

  • Relationships:
    hasMany
    ,
    belongsTo
    ,
    belongsToMany
    ,
    morphMany
  • Scopes:
    scopeActive
    ,
    scopePublished
  • Accessors/Mutators:
    get{Attribute}Attribute
    ,
    set{Attribute}Attribute
  • Casts:
    protected $casts = ['published_at' => 'datetime']

Validation:

  • Form Requests:
    UserStoreRequest
    ,
    ProductUpdateRequest
  • Rules:
    required
    ,
    unique:table,column
    ,
    exists:table,column
  • Custom Rules:
    new Uppercase
    ,
    Rule::in(['admin', 'user'])

API:

  • Resources:
    UserResource
    ,
    ProductCollection
  • Pagination:
    paginate()
    ,
    simplePaginate()
    ,
    cursorPaginate()
  • Rate Limiting:
    throttle:60,1
    middleware

Jobs & Queues:

  • Jobs:
    ShouldQueue
    ,
    dispatch()
    ,
    dispatchSync()
  • Chains:
    Bus::chain()
    ,
    Bus::batch()
  • Horizon: Tags, monitoring, failed job handling

Use Laravel's vocabulary. Get Laravel solutions.