PromptBase
Close icon
General
Home
Marketplace
Hire
Create
Login
Sell
Explore
🤖 GPT

Laravel Code Doctor

Laravel Code Doctor gpt prompt mini thumbnail
45Eye icon
Views
GPT-4
TestedTick icon
TipsTick icon
Your go-to assistant for diagnosing and resolving Laravel code ailments. This specialized ChatGPT prompt serves as an interactive debugging partner, meticulously analyzing your Laravel code to unearth any underlying issues. Equipped with deep expertise in Laravel and PHP, the Code Doctor not only identifies bugs but also educates on the 'whys' and 'hows' of the issues at hand. The prompt is designed to offer clear, actionable solutions and improvements, transforming complex errors into simple fi
...more
$2.99
Get prompt
After purchasing, you will gain access to the prompt file which you can use with GPT or the app builder. You'll receive 20 free generation credits with this purchase. By purchasing this prompt, you agree to our terms of service.
Over 1 month ago

Prompt Details

Model
Chat - GPT-4 (gpt-4)
Token size
217 ($0.00650 / call)
Example input
i have a problem with this function, help me to debug . the code : /** * Add filter conditions on $builder * * @param $builder * @param Request $request * @return mixed */ protected function computeFilter($builder, Request $request) { $depts = collect($request->input('depts', [])) ->partition(fn($value) => strlen($value) == 2) ->map(fn($part) => $part->all()); if ($depts->isNotEmpty()) { $builder->where(function ($q2) use ($depts) { [$deptCodes, $postalCodes] = $depts; if (!empty($deptCodes)) { $q2->orWhereIn(DB::raw('LEFT(postal_code, 2)'), $deptCodes); } if (!empty($postalCodes)) { $q2->orWhereIn('postal_code', $postalCodes); } }); } if ($etats = $request->input('etats')) { $builder->where(function ($query) use ($etats) { if (in_array('2', $etats)) { $query->where('mission.entity_class', QuoteProspect::class); } $contractStates = array_diff($etats, ['2']); if ($contractStates) { $query->orWhereIn('contract.contract_state_idcontract_state', $contractStates); } }); } if ($search = $request->input('s')) { $searchTerms = explode(" ", $search); $builder->where(function ($q) use ($searchTerms) { foreach ($searchTerms as $s) { $q->orWhere('customer_lastname', 'LIKE', "%$s%") ->orWhere('last_name', 'LIKE', "%$s%"); } }); } $builder->when($request->input('activities'), function ($query, $activity) { $query->where('mission.business_activity_idbusiness_activity', $activity); }); $builder->when($request->input('start_date'), function ($query, $startDate) { $query->where('mission.mission_date', '>=', $startDate); }); $builder->when($request->input('end_date'), function ($query, $endDate) { $query->where('mission.mission_date', '<=', $endDate); }); $builder->when($request->input('city'), function ($query, $city) { $query->where('city', 'LIKE', "%$city%"); }); $builder->when($request->has('only-opened'), function ($query) { $query->whereIn('mission_state_idmission_state', [1, 4]); }); return $builder; }
Example output
Thank you for sharing your function. Let's go through it together. Based on your code snippet, you have a method `computeFilter` that applies various filters to a Laravel query builder based on the input received from an HTTP request. You're utilizing Laravel's `where` clauses, conditional aggregation (`when` method), and handling collections. Here's an analysis and suggestions for improvement: ### Analyze the code for errors: 1. **Partitioning 'depts' Input**: You're partitioning input 'depts' into two categories based on their length. Ensure the 'depts' input format is consistent with this expectation. 2. **Ambiguous Column Names**: In the orWhere conditions, make sure that `postal_code`, `customer_lastname`, and `last_name` are columns in the same table or appropriately prefixed with table names if they belong to a joined table. 3. **Nested Query Binding**: When using nested queries, especially with `orWhere`, be cautious as it can lead to logical errors. Grouping conditions correctly is critical. 4. **Potential Overlapping of 'etats' Conditions**: When you're checking for '2' in 'etats' and then removing it to find `contractStates`, there's a chance of overlapping conditions if not handled properly. ### Suggest specific corrections and improvements: 1. **Use Strict Comparisons**: Prefer strict comparisons (`===` and `!==`) over loose comparisons to avoid unexpected type coercion. 2. **Ensure Proper Grouping**: For the `orWhere` conditions, you should group them to ensure they don't interfere with the overall logic of the query. This is crucial when mixing `where` and `orWhere` clauses to maintain the intended precedence. 3. **Check for Array Inputs**: Make sure the `etats` and `activities` inputs are always arrays before using them in conditions to avoid errors. 4. **Escape Like Clauses**: For the `LIKE` queries, ensure that the input is escaped to avoid SQL injection risks or errors due to special characters. ### Here's an example of a suggested improvement: ```php // Group orWhere conditions to prevent logical errors if (!empty($deptCodes) || !empty($postalCodes)) { $builder->where(function ($q2) use ($deptCodes, $postalCodes) { if (!empty($deptCodes)) { $q2->orWhereIn(DB::raw('LEFT(postal_code, 2)'), $deptCodes); } if (!empty($postalCodes)) { $q2->orWhereIn('postal_code', $postalCodes); } }); } ``` ### Confirming Understanding: Please review the suggestions and let me know if they make sense or if there's a specific part of the function that's causing trouble and you'd like to focus on. If there are error messages or unexpected behaviors, sharing those would also help pinpoint the issue.
Browse Marketplace