@@ -18,6 +18,7 @@ class ModelGenerator extends BaseGenerator
18
18
protected $ excluded_fields = [
19
19
'created_at ' ,
20
20
'updated_at ' ,
21
+ 'deleted_at ' ,
21
22
];
22
23
23
24
/** @var CommandData */
@@ -266,14 +267,56 @@ private function fillTimestamps($templateData)
266
267
private function generateRules ()
267
268
{
268
269
$ dont_require_fields = config ('infyom.laravel_generator.options.hidden_fields ' , [])
269
- + config ('infyom.laravel_generator.options.excluded_fields ' , [] );
270
+ + config ('infyom.laravel_generator.options.excluded_fields ' , $ this -> excluded_fields );
270
271
271
272
$ rules = [];
272
273
273
274
foreach ($ this ->commandData ->fields as $ field ) {
274
- if (!$ field ->isPrimary && $ field ->isNotNull && empty ($ field ->validations ) &&
275
- !in_array ($ field ->name , $ dont_require_fields )) {
276
- $ field ->validations = 'required ' ;
275
+ if (!$ field ->isPrimary && !in_array ($ field ->name , $ dont_require_fields )) {
276
+ if ($ field ->isNotNull && empty ($ field ->validations )) {
277
+ $ field ->validations = 'required ' ;
278
+ }
279
+
280
+ /**
281
+ * Generate some sane defaults based on the field type if we
282
+ * are generating from a database table.
283
+ */
284
+ if ($ this ->commandData ->getOption ('fromTable ' )) {
285
+ $ rule = empty ($ field ->validations ) ? [] : explode ('| ' , $ field ->validations );
286
+
287
+ if (!$ field ->isNotNull ) {
288
+ $ rule [] = 'nullable ' ;
289
+ }
290
+
291
+ switch ($ field ->fieldType ) {
292
+ case 'integer ' :
293
+ $ rule [] = 'integer ' ;
294
+ break ;
295
+ case 'boolean ' :
296
+ $ rule [] = 'boolean ' ;
297
+ break ;
298
+ case 'float ' :
299
+ case 'double ' :
300
+ case 'decimal ' :
301
+ $ rule [] = 'numeric ' ;
302
+ break ;
303
+ case 'string ' :
304
+ $ rule [] = 'string ' ;
305
+
306
+ // Enforce a maximum string length if possible.
307
+ foreach (explode (': ' , $ field ->dbInput ) as $ key => $ value ) {
308
+ if (preg_match ('/string,(\d+)/ ' , $ value , $ matches )) {
309
+ $ rule [] = 'max: ' .$ matches [1 ];
310
+ }
311
+ }
312
+ break ;
313
+ case 'text ' :
314
+ $ rule [] = 'string ' ;
315
+ break ;
316
+ }
317
+
318
+ $ field ->validations = implode ('| ' , $ rule );
319
+ }
277
320
}
278
321
279
322
if (!empty ($ field ->validations )) {
0 commit comments