Laravel定制应用新增数组输入service_description[]无法插入数据库
Hey there! Let's break down the possible issues that might be preventing your service_description[] array field from being saved to the database, since all other fields are working fine. Here are the most common culprits to check:
1. Model Bulk Assignment Restrictions
Laravel protects against mass assignment by default, so first make sure your service_description field is allowed in your Order model's $fillable array (or that $guarded is empty, though $fillable is safer). If it's missing here, Laravel will silently skip saving this field even if it's present in the request.
// In your Order model protected $fillable = [ 'customer_name', // Example existing field 'order_date', // Example existing field 'service_description', // Add this line! ];
2. Database Column Type Mismatch
Array data can't be stored in a standard varchar column. You need to use a json or text type for service_description:
- For JSON storage (recommended), your migration should define the column like this:
$table->json('service_description')->nullable(); - If using
text, add a cast in your model to auto-serialize/deserialize the array:protected $casts = [ 'service_description' => 'array', ];
3. Controller Logic Missing the Field
Double-check your Order Controller's store (or update) method. If you're manually listing fields to save instead of using $request->all() or $request->validated(), you might have forgotten to include service_description.
❌ Wrong (missing the field):
$order = Order::create([ 'customer_name' => $request->customer_name, 'order_date' => $request->order_date, // Oops, no service_description here ]);
✅ Correct (includes the field):
// Option 1: Use all request data (only safe if fillable is properly set) $order = Order::create($request->all()); // Option 2: Explicitly list allowed fields $order = Order::create($request->only([ 'customer_name', 'order_date', 'service_description' ]));
4. Form Request Validation Excludes the Field
If you're using a custom Form Request class for validation, make sure service_description is included in the rules. If you use $request->validated() to create the order, only fields defined in the validation rules will be passed through.
// In your OrderRequest class public function rules() { return [ 'customer_name' => 'required|string', 'order_date' => 'required|date', 'service_description' => 'array', // Allow array type 'service_description.*' => 'string|max:255', // Validate individual array items ]; }
5. Tailor-Specific Configuration Issues
Since this is a Laravel Tailor app, it might have custom resource definitions that control which fields are processed. Check your Tailor resource config (usually in tailor/resources/) to ensure you've added the service_description field with the correct type:
# Example in tailor/resources/orders.yaml fields: customer_name: type: string label: Customer Name order_date: type: date label: Order Date service_description: type: array label: Service Descriptions
If Tailor doesn't recognize the field, it might filter it out before it reaches the database save logic.
6. HTML Form Field Naming Errors
Verify your form's field names are correctly written as service_description[] (with square brackets). A typo like service_descriptions[] or missing brackets will cause Laravel to treat it as a single string instead of an array, which might fail to save if your model expects an array.
<!-- Correct array field setup --> <input type="text" name="service_description[]" placeholder="Service detail 1"> <input type="text" name="service_description[]" placeholder="Service detail 2">
Start with checking the model's $fillable and controller input handling—those are the most frequent gotchas. Then work through the database column type and Tailor configuration since this is a customized app.
内容的提问来源于stack exchange,提问作者Tonye Boro

