· 7 years ago · Nov 02, 2018, 09:54 AM
1<?php
2
3use IlluminateDatabaseMigrationsMigration;
4use IlluminateDatabaseSchemaBlueprint;
5use IlluminateSupportFacadesSchema;
6
7class CreateMyTableTable extends Migration
8{
9 /**
10 * Run the migrations.
11 */
12 public function up(): void
13 {
14 Schema::create('my_table', function (Blueprint $table) {
15 $table->increments('id');
16
17 $table->integer('user_id')->unsigned();
18 $table->foreign('user_id')->references('id')->on('user');
19
20 $table->tinyInteger('from_default')->nullable(false)->default(7);
21 $table->tinyInteger('to_default')->nullable(false)->default(20);
22 $table->timestamps();
23
24 $table->unique('user_id');
25 });
26 }
27
28 /**
29 * Reverse the migrations.
30 */
31 public function down(): void
32 {
33 Schema::dropIfExists('my_table', function (Blueprint $table) {
34 $table->dropUnique(['user_id']);
35 $table->dropForeign(['user_id']);
36 });
37 }
38}
39
40Field Type Null Key Default Extra
41-------------------------------------------------------------------------------
42id int(10) unsigned NO PRI auto_increment
43user_id int(10) unsigned NO UNI
44from_default tinyint(4) NO 7
45to_default tinyint(4) NO 20
46created_at timestamp YES
47updated_at timestamp YES
48
49<?php
50
51use AppDomainLogicModelsMyTable;
52use AppDomainLogicModelsUser;
53use FakerFactory as FakerFactory;
54use IlluminateDatabaseSeeder;
55
56class MyTableTableSeeder extends Seeder
57{
58 /**
59 * @var array list of MyTable Users
60 */
61 private $myTableUsers = [];
62
63 /**
64 * Run the database seeds.
65 */
66 public function run()
67 {
68 $this->createMyTableUsers();
69 $myTableUsers = $this->getMyTableUsers();
70 foreach ($myTableUsers as $myTableUser) {
71 factory(MyTable::class)->create([
72 'user_id' => $myTableUser->getKey(),
73 'from_default' => 7,
74 'to_default' => 20,
75 ]);
76 }
77 }
78
79 private function getMyTableUsers(): array
80 {
81 return $this->myTableUsers;
82 }
83
84 private function createMyTableUsers()
85 {
86 $faker = FakerFactory::create();
87
88 // My table
89 $this->myTableUsers[] = factory(User::class)->create([
90 'id' => 2,
91 'first_name' => 'Kalle',
92 'last_name' => 'Andersson',
93 'email' => 'kalle.andersson@email.com',
94 'password' => bcrypt('password', ['rounds' => 4]),
95 'mobile_number' => $faker->e164PhoneNumber,
96 ]);
97 $this->myTableUsers[] = factory(User::class)->create([
98 'id' => 3,
99 'first_name' => 'Johan',
100 'last_name' => 'Petterson',
101 'email' => 'johan.petterson@email.com',
102 'password' => bcrypt('password', ['rounds' => 4]),
103 'mobile_number' => $faker->e164PhoneNumber,
104 ]);
105 $this->myTableUsers[] = factory(User::class)->create([
106 'id' => 4,
107 'first_name' => 'Krister',
108 'last_name' => 'Johansson',
109 'email' => 'krister.johansson@email.com',
110 'password' => bcrypt('password', ['rounds' => 4]),
111 'mobile_number' => $faker->e164PhoneNumber,
112 ]);
113 $this->myTableUsers[] = factory(User::class)->create([
114 'id' => 5,
115 'first_name' => 'Daniel',
116 'last_name' => 'Eriksson',
117 'email' => 'daniel.eriksson@email.com',
118 'password' => bcrypt('password', ['rounds' => 4]),
119 'mobile_number' => $faker->e164PhoneNumber,
120 ]);
121 }
122}
123
124In Connection.php line 664:
125
126 SQLSTATE[42S22]: Column not found: 1054 Unknown column 'starts_day_default' in 'field list' (SQL: insert into `my_table` (`user_id`, `starts_day_default`, `ends_day_default`, `from_default`, `to_default`) values (2, 07, 20, 7, 20))
127
128In PDOConnection.php line 82:
129
130 SQLSTATE[42S22]: Column not found: 1054 Unknown column 'starts_day_default' in 'field list'
131
132In PDOConnection.php line 80:
133
134 SQLSTATE[42S22]: Column not found: 1054 Unknown column 'starts_day_default' in 'field list'
135
136<?php
137
138namespace AppDomainLogicModels;
139
140use DateTimeImmutable;
141use IlluminateDatabaseEloquentCollection;
142use IlluminateDatabaseEloquentModel;
143
144class MyTable extends Model
145{
146 /**
147 * Indicates if the model should be timestamped.
148 *
149 * @var bool
150 */
151 public $timestamps = false;
152 /**
153 * The table associated with the model.
154 *
155 * @var string
156 */
157 protected $table = 'my_table';
158
159 /**
160 * Creates personal trainer, if personal trainer with id exists.
161 *
162 * @param int $myTableId
163 *
164 * @return null|self
165 */
166 public static function createFromId(int $myTableId): ?self
167 {
168 $myTable = self::select('my_table.*')
169 ->join('user', 'user.id', '=', 'my_table.user_id')
170 ->where('my_table.id', '=', $myTableId)
171 ->whereNull('user.anonymized_at')
172 ->get()
173 ->first();
174
175 return $myTable;
176 }
177
178 /**
179 * Create personal trainer, if user_id exists.
180 *
181 * @param int $userId
182 *
183 * @return null|MyTable
184 */
185 public static function createFromUserId(int $userId): ?self
186 {
187 return self::where('user_id', $userId)->get()->first();
188 }
189
190 /**
191 * Gets all personal trainers.
192 *
193 * @param bool $active
194 *
195 * @return Collection
196 */
197 public static function getMyTables(bool $active = null): Collection
198 {
199 $query = self::select('my_table.*')
200 ->join('user', 'user.id', '=', 'my_table.user_id')
201 ->whereNull('user.anonymized_at');
202
203 if (isset($active)) {
204 $query->where('user.active', '=', $active);
205 }
206
207 $myTables = $query->get();
208
209 return $myTables;
210 }
211
212 /**
213 * Gets user.
214 */
215 public function getUser(): User
216 {
217 $user = $this->belongsTo(User::class, 'user_id', 'id')->getResults();
218
219 return $user;
220 }
221
222 /**
223 * Check if personal trainers ids are valid.
224 *
225 * @param array $myTableIds
226 *
227 * @return bool
228 */
229 public static function areMyTableIdsValid(array $myTableIds): bool
230 {
231 $dbMyTableIds = self::select('my_table.id')
232 ->join('user', 'user.id', '=', 'my_table.user_id')
233 ->whereIn('my_table.id', $myTableIds)
234 ->whereNull('user.anonymized_at')
235 ->get()
236 ->pluck('id')
237 ->toArray();
238
239 $dbMyTableIds = array_map('intval', $dbMyTableIds);
240 sort($myTableIds);
241 sort($dbMyTableIds);
242
243 $result = false;
244 if ($myTableIds === $dbMyTableIds) {
245 $result = true;
246 }
247
248 return $result;
249 }
250}
251
252php artisan view:clear
253
254php artisan cache:clear
255
256php artisan debugbar:clear
257
258composer dump-autoload