@@ -77,6 +77,10 @@ protected function buildDefinition(Model $model)
77
77
continue ;
78
78
}
79
79
80
+ if (Str::startsWith ($ column ->dataType (), 'nullable ' )) {
81
+ continue ;
82
+ }
83
+
80
84
$ foreign = $ column ->isForeignKey ();
81
85
if ($ foreign ) {
82
86
$ table = Str::beforeLast ($ column ->name (), '_id ' );
@@ -109,7 +113,7 @@ protected function buildDefinition(Model $model)
109
113
$ definition .= PHP_EOL ;
110
114
$ definition .= self ::INDENT . '}, ' . PHP_EOL ;
111
115
}
112
- } elseif (in_array ( $ column ->dataType (), [ 'id ' , 'uuid ' ] )) {
116
+ } elseif ($ column ->dataType () === 'id ' || ( $ column -> dataType () === 'uuid ' && Str:: endsWith ( $ column -> name (), ' _id ' ) )) {
113
117
$ name = Str::beforeLast ($ column ->name (), '_id ' );
114
118
$ class = Str::studly ($ column ->attributes ()[0 ] ?? $ name );
115
119
@@ -140,7 +144,7 @@ protected function buildDefinition(Model $model)
140
144
implode (', ' , [$ scale , 0 , (str_repeat (9 , $ precision - $ scale ) . '. ' . str_repeat (9 , $ scale ))]),
141
145
$ definition
142
146
);
143
- } elseif ($ column ->dataType () === 'json ' ) {
147
+ } elseif (in_array ( $ column ->dataType (), [ 'json ' , ' jsonb ' ]) ) {
144
148
$ default = $ column ->defaultValue () ?? "'{}' " ;
145
149
$ definition .= self ::INDENT . "' {$ column ->name ()}' => {$ default }, " . PHP_EOL ;
146
150
} elseif ($ column ->dataType () === 'morphs ' ) {
@@ -156,7 +160,18 @@ protected function buildDefinition(Model $model)
156
160
$ definition .= ', ' . PHP_EOL ;
157
161
} else {
158
162
$ definition .= self ::INDENT . "' {$ column ->name ()}' => " ;
159
- $ faker = self ::fakerData ($ column ->name ()) ?? self ::fakerDataType ($ column ->dataType ());
163
+
164
+ $ type = $ column ->dataType ();
165
+ if ($ column ->isUnsigned ()) {
166
+ $ type = 'unsigned ' . $ type ;
167
+ }
168
+
169
+ $ faker = self ::fakerData ($ column ->name ()) ?? (self ::fakerDataType ($ type ) ?? self ::fakerDataType ($ column ->dataType ()));
170
+
171
+ if ($ faker === null ) {
172
+ $ faker = 'word ' ;
173
+ }
174
+
160
175
$ definition .= '$faker-> ' . $ faker ;
161
176
$ definition .= ', ' . PHP_EOL ;
162
177
}
@@ -235,29 +250,57 @@ public static function fakerData(string $name)
235
250
public static function fakerDataType (string $ type )
236
251
{
237
252
$ fakeableTypes = [
238
- 'biginteger ' => 'randomNumber() ' ,
253
+ 'biginteger ' => 'numberBetween(-100000, 100000) ' ,
254
+ 'binary ' => 'sha256 ' ,
239
255
'boolean ' => 'boolean ' ,
256
+ 'char ' => 'randomLetter ' ,
240
257
'date ' => 'date() ' ,
241
258
'datetime ' => 'dateTime() ' ,
242
259
'datetimetz ' => 'dateTime() ' ,
243
260
'decimal ' => 'randomFloat(/** decimal_attributes **/) ' ,
244
261
'double ' => 'randomFloat(/** double_attributes **/) ' ,
245
262
'enum ' => 'randomElement(/** enum_attributes **/) ' ,
246
263
'float ' => 'randomFloat(/** float_attributes **/) ' ,
264
+ 'geometry ' => 'word ' ,
265
+ 'geometrycollection ' => 'word ' ,
247
266
'guid ' => 'uuid ' ,
248
267
'id ' => 'randomDigitNotNull ' ,
249
- 'integer ' => 'randomNumber() ' ,
268
+ 'integer ' => 'numberBetween(-10000, 10000) ' ,
269
+ 'ipaddress ' => 'ipv4 ' ,
270
+ 'linestring ' => 'word ' ,
250
271
'longtext ' => 'text ' ,
272
+ 'macaddress ' => 'macAddress ' ,
273
+ 'mediuminteger ' => 'numberBetween(-10000, 10000) ' ,
274
+ 'mediumtext ' => 'text ' ,
275
+ 'morphs_id ' => 'randomDigitNotNull ' ,
276
+ 'morphs_type ' => 'word ' ,
277
+ 'multilinestring ' => 'word ' ,
278
+ 'multipoint ' => 'word ' ,
279
+ 'multipolygon ' => 'word ' ,
280
+ 'nullablemorphs ' => null ,
281
+ 'nullabletimestamps ' => null ,
282
+ 'nullableuuidmorphs ' => null ,
283
+ 'point ' => 'word ' ,
284
+ 'polygon ' => 'word ' ,
251
285
'set ' => 'randomElement(/** set_attributes **/) ' ,
252
- 'smallint ' => 'randomNumber( ) ' ,
253
- 'smallinteger ' => 'randomNumber( ) ' ,
286
+ 'smallint ' => 'numberBetween(-1000, 1000 ) ' ,
287
+ 'smallinteger ' => 'numberBetween(-1000, 1000 ) ' ,
254
288
'string ' => 'word ' ,
255
289
'text ' => 'text ' ,
256
290
'time ' => 'time() ' ,
257
291
'timestamp ' => 'dateTime() ' ,
258
- 'tinyinteger ' => 'randomNumber() ' ,
259
- 'unsignedsmallinteger ' => 'randomDigitNotNull ' ,
292
+ 'timestamptz ' => 'dateTime() ' ,
293
+ 'timetz ' => 'time() ' ,
294
+ 'tinyinteger ' => 'numberBetween(-8, 8) ' ,
295
+ 'unsignedbiginteger ' => 'randomNumber() ' ,
296
+ 'unsigneddecimal ' => 'randomNumber() ' ,
297
+ 'unsignedinteger ' => 'randomNumber() ' ,
298
+ 'unsignedmediuminteger ' => 'randomNumber() ' ,
299
+ 'unsignedsmallinteger ' => 'randomNumber() ' ,
300
+ 'unsignedtinyinteger ' => 'randomDigitNotNull ' ,
260
301
'uuid ' => 'uuid ' ,
302
+ 'uuidmorphs ' => 'word ' ,
303
+ 'year ' => 'year() ' ,
261
304
];
262
305
263
306
return $ fakeableTypes [strtolower ($ type )] ?? null ;
0 commit comments