File tree Expand file tree Collapse file tree 8 files changed +151
-6
lines changed Expand file tree Collapse file tree 8 files changed +151
-6
lines changed Original file line number Diff line number Diff line change @@ -102,6 +102,43 @@ LoadFile::connection('mysql')
102
102
->load();
103
103
```
104
104
105
+ ## Loading data into Eloquent Models
106
+
107
+ Simply add the ` LoadsFiles ` trait to your model like so:
108
+
109
+ ``` php
110
+ use EllGreen\LaravelLoadFile\Laravel\Traits\LoadsFiles;
111
+
112
+ class User extends Model
113
+ {
114
+ use LoadsFiles;
115
+ }
116
+ ```
117
+
118
+ Then you can use the following method to load a file into that table:
119
+
120
+ ``` php
121
+ User::loadFile('/path/to/users.csv', $local = true);
122
+ ```
123
+
124
+ ### Need to specify options to load the file with?
125
+
126
+ Add the following method to your Model
127
+
128
+ ``` php
129
+ class User extends Model
130
+ {
131
+ use LoadsFiles;
132
+
133
+ public function loadFileOptions(Builder $builder): void
134
+ {
135
+ $builder
136
+ ->fieldsTerminatedBy(',')
137
+ ->ignoreLines(1);
138
+ }
139
+ }
140
+ ```
141
+
105
142
## Development
106
143
107
144
### Unit tests
Original file line number Diff line number Diff line change 10
10
11
11
class Builder
12
12
{
13
- use Concerns \LoadsFiles ;
13
+ use Concerns \HasFile ;
14
14
use Concerns \ReplacesOrIgnores;
15
15
use Concerns \HasColumns;
16
16
use Concerns \HasFields;
Original file line number Diff line number Diff line change 2
2
3
3
namespace EllGreen \LaravelLoadFile \Builder \Concerns ;
4
4
5
- trait LoadsFiles
5
+ trait HasFile
6
6
{
7
7
private ?string $ file = null ;
8
8
private bool $ local = false ;
Original file line number Diff line number Diff line change
1
+ <?php
2
+
3
+ namespace EllGreen \LaravelLoadFile \Laravel \Traits ;
4
+
5
+ use EllGreen \LaravelLoadFile \Builder \Builder ;
6
+ use EllGreen \LaravelLoadFile \Exceptions \CompilationException ;
7
+
8
+ trait LoadsFiles
9
+ {
10
+ /**
11
+ * @throws CompilationException
12
+ */
13
+ public static function loadFile (string $ file , ?bool $ local = null ): bool
14
+ {
15
+ return static ::loadFileBuilder ($ file , $ local )->load ();
16
+ }
17
+
18
+ public static function loadFileBuilder (string $ file , ?bool $ local = null ): Builder
19
+ {
20
+ /** @var Builder $builder */
21
+ $ builder = app (Builder::class);
22
+
23
+ $ model = app (static ::class);
24
+ $ builder ->file ($ file , $ local )->into ($ model ->getTable ());
25
+
26
+ $ model ->loadFileOptions ($ builder );
27
+
28
+ return $ builder ;
29
+ }
30
+
31
+ public function loadFileOptions (Builder $ builder ): void
32
+ {
33
+ //
34
+ }
35
+
36
+ abstract public function getTable ();
37
+ }
Original file line number Diff line number Diff line change
1
+ <?php
2
+
3
+ namespace Tests \Feature ;
4
+
5
+ use EllGreen \LaravelLoadFile \Builder \Builder ;
6
+ use Tests \Feature \Models \TestUser ;
7
+ use Tests \Feature \Models \TestUserNoOptions ;
8
+
9
+ class LoadsFilesTraitTest extends TestCase
10
+ {
11
+ public function testGetBuilder (): void
12
+ {
13
+ $ builder = TestUser::loadFileBuilder ('/path/to/test_users.csv ' , true );
14
+
15
+ $ this ->assertSame ('test_users ' , $ builder ->getTable ());
16
+ }
17
+
18
+ public function testGetBuilderWithOptions (): void
19
+ {
20
+ $ builder = TestUser::loadFileBuilder ('/path/to/test_users.csv ' , true );
21
+
22
+ $ this ->assertTrue ($ builder ->isReplace ());
23
+ }
24
+
25
+ public function testDefaultLoadFileOptions ()
26
+ {
27
+ $ builder = TestUserNoOptions::loadFileBuilder ('/path/to/test_users.csv ' , true );
28
+
29
+ $ this ->assertFalse ($ builder ->isReplace ());
30
+ }
31
+
32
+ public function testLoadFile (): void
33
+ {
34
+ $ this ->instance (Builder::class, $ builder = $ this ->createPartialMock (Builder::class, [
35
+ 'load ' ,
36
+ ]));
37
+
38
+ $ builder ->method ('load ' )->willReturn (true );
39
+
40
+ $ result = TestUser::loadFile ('/path/to/employees.csv ' , true );
41
+ $ this ->assertTrue ($ result );
42
+ }
43
+ }
Original file line number Diff line number Diff line change
1
+ <?php
2
+
3
+ namespace Tests \Feature \Models ;
4
+
5
+ use EllGreen \LaravelLoadFile \Builder \Builder ;
6
+ use EllGreen \LaravelLoadFile \Laravel \Traits \LoadsFiles ;
7
+ use Illuminate \Database \Eloquent \Model ;
8
+
9
+ class TestUser extends Model
10
+ {
11
+ use LoadsFiles;
12
+
13
+ public function loadFileOptions (Builder $ builder ): void
14
+ {
15
+ $ builder ->replace ();
16
+ }
17
+ }
Original file line number Diff line number Diff line change
1
+ <?php
2
+
3
+ namespace Tests \Feature \Models ;
4
+
5
+ use EllGreen \LaravelLoadFile \Laravel \Traits \LoadsFiles ;
6
+ use Illuminate \Database \Eloquent \Model ;
7
+
8
+ class TestUserNoOptions extends Model
9
+ {
10
+ use LoadsFiles;
11
+ }
Original file line number Diff line number Diff line change 2
2
3
3
namespace Tests \Unit \Builder \Concerns ;
4
4
5
- use EllGreen \LaravelLoadFile \Builder \Concerns \LoadsFiles ;
5
+ use EllGreen \LaravelLoadFile \Builder \Concerns \HasFile ;
6
6
use PHPUnit \Framework \MockObject \MockObject ;
7
7
use PHPUnit \Framework \TestCase ;
8
8
9
- class LoadsFilesTest extends TestCase
9
+ class HasFileTest extends TestCase
10
10
{
11
- /** @var MockObject|LoadsFiles */
11
+ /** @var MockObject|HasFile */
12
12
private MockObject $ loadsFiles ;
13
13
14
14
protected function setUp (): void
15
15
{
16
16
parent ::setUp ();
17
17
18
- $ this ->loadsFiles = $ this ->getMockForTrait (LoadsFiles ::class);
18
+ $ this ->loadsFiles = $ this ->getMockForTrait (HasFile ::class);
19
19
}
20
20
21
21
public function testSetFile ()
You can’t perform that action at this time.
0 commit comments