You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: eloquent.md
+21-33
Original file line number
Diff line number
Diff line change
@@ -16,28 +16,25 @@ Laravel содержит [ORM-библиотеку](https://ru.wikipedia.org/wik
16
16
17
17
Если вы новичок в Laravel, не стесняйтесь присоединиться к [Laravel Bootcamp](https://bootcamp.laravel.com). Laravel Bootcamp поможет вам создать свое первое приложение Laravel с использованием Eloquent. Это отличный способ получить обзор всего, что предлагают Laravel и Eloquent.
18
18
19
-
20
19
<aname="generating-model-classes"></a>
21
20
## Генерация классов модели
22
21
23
22
Модели расширяют класс `Illuminate\Database\Eloquent\Model`. Чтобы сгенерировать новую модель Eloquent, используйте [Artisan](artisan)-команду `make:model`. Эта команда поместит новый класс модели в каталог `app/Models` вашего приложения:
24
23
25
-
26
24
```shell
27
25
php artisan make:model Flight
28
26
```
29
27
30
28
При создании модели вы можете сгенерировать [миграцию БД](/docs/{{version}}/migrations), используя параметр `--migration` или `-m`:
31
29
32
-
33
30
```shell
34
31
php artisan make:model Flight --migration
35
32
```
36
33
37
34
При создании модели вы можете также создавать другие различные типы классов, например фабрики, наполнители (seeders), политики, контроллеры и запросы форм. Кроме того, эти параметры можно комбинировать для создания сразу нескольких классов:
38
35
39
36
```shell
40
-
# Создать модель и класс FlightFactory...
37
+
# Создать модель и класс FlightFactory...
41
38
php artisan make:model Flight --factory
42
39
php artisan make:model Flight -f
43
40
@@ -90,7 +87,7 @@ php artisan model:show Flight
90
87
91
88
class Flight extends Model
92
89
{
93
-
// ...
90
+
// ...
94
91
}
95
92
96
93
<aname="table-names"></a>
@@ -171,14 +168,12 @@ Eloquent также предполагает, что в соответствую
171
168
Eloquent требует, чтобы каждая модель имела по крайней мере один однозначно идентифицирующий «ID», который может служить ее первичным ключом. «Составные» первичные ключи не поддерживаются моделями Eloquent. Однако вы можете добавить дополнительные многоколоночные уникальные индексы к таблицам базы данных в дополнение к однозначно определяющему (уникальному) первичному ключу таблицы.
172
169
173
170
<aname="uuid-and-ulid-keys"></a>
174
-
175
171
### UUID и ULID ключи
176
172
177
173
Вместо использования автоинкрементных целых чисел в качестве первичных ключей вашей модели Eloquent вы можете выбрать использование UUID. UUID - это уникальные буквенно-цифровые идентификаторы длиной 36 символов.
178
174
179
175
Если вы хотите, чтобы модель использовала ключ UUID вместо автоинкрементного целочисленного ключа, вы можете использовать трейт `Illuminate\Database\Eloquent\Concerns\HasUuids` в модели. Конечно же, убедитесь, что у модели есть [столбец первичного ключа, эквивалентный UUID](/docs/{{version}}/migrations#column-method-uuid)::
180
176
181
-
182
177
use Illuminate\Database\Eloquent\Concerns\HasUuids;
183
178
use Illuminate\Database\Eloquent\Model;
184
179
@@ -193,7 +188,6 @@ Eloquent требует, чтобы каждая модель имела по к
По умолчанию трейт `HasUuids` генерирует ["упорядоченные" UUID](/docs/{{version}}/strings#method-str-ordered-uuid) для ваших моделей. Эти UUID более эффективны для индексированного хранения в базе данных, поскольку их можно лексикографически сортировать.
198
192
199
193
Вы можете переопределить процесс генерации UUID для определенной модели, определив метод `newUniqueId` в модели. Кроме того, вы можете указать, какие столбцы должны получать UUID, определив метод `uniqueIds` в модели:
@@ -351,7 +345,6 @@ public function boot(): void
351
345
}
352
346
```
353
347
354
-
355
348
Также вы можете указать Laravel генерировать исключение при попытке назначения неподлежащего назначению атрибута, вызвав метод `preventSilentlyDiscardingAttributes`. Это может помочь предотвратить неожиданные ошибки во время локальной разработки, когда попытаетесь присвоить значение, который не был добавлен в массив `fillable` модели:
356
349
357
350
```php
@@ -565,24 +558,23 @@ Eloquent также предлагает поддержку расширенны
565
558
566
559
use App\Models\Flight;
567
560
568
-
// Получить модель по ее первичному ключу...
561
+
// Получить модель по ее первичному ключу...
569
562
$flight = Flight::find(1);
570
563
571
-
// Получить первую модель, соответствующую условиям запроса...
564
+
// Получить первую модель, соответствующую условиям запроса...
572
565
$flight = Flight::where('active', 1)->first();
573
566
574
-
// Альтернатива извлечению первой модели, соответствующей условиям запроса...
// Альтернатива извлечению первой модели, соответствующей условиям запроса...
568
+
$flight = Flight::firstWhere('active', 1);
576
569
577
570
По желанию можно выполнить какое-либо другое действие, если результаты не найдены. Методы `findOr` и `firstOr` вернут один экземпляр модели или, если результаты не найдены, выполнят переданное замыкание. Значение, возвращенное замыканием, будет считаться результатом метода:
> Все базы данных, кроме SQL Server, требуют, чтобы столбцы второго аргумента метода `upsert` имели "primary" или "unique" индекс. Кроме того, драйверы базы данных MariaDB и MySQL игнорируют второй аргумент метода `upsert` и всегда используют "primary" и "unique" индексы таблицы для обнаружения существующих записей.
889
880
890
881
<aname="deleting-models"></a>
@@ -955,7 +946,7 @@ Eloquent содержит методы `isDirty`, `isClean` и `wasChanged` дл
955
946
Вам также следует добавить столбец `deleted_at` в таблицу БД. [Построитель схемы](/docs/{{version}}/migrations) Laravel содержит метод для создания этого столбца:
956
947
957
948
use Illuminate\Database\Schema\Blueprint;
958
-
use Illuminate\Facades\Schema;
949
+
use Illuminate\Support\Facades\Schema;
959
950
960
951
Schema::table('flights', function (Blueprint $table) {
961
952
$table->softDeletes();
@@ -982,7 +973,7 @@ Eloquent содержит методы `isDirty`, `isClean` и `wasChanged` дл
982
973
983
974
Вы также можете использовать метод `restore` в запросе для восстановления нескольких моделей. Опять же, как и другие «массовые» операции, это не вызовет никаких событий модели для восстанавливаемых моделей:
984
975
985
-
App\Models\Flight::withTrashed()
976
+
Flight::withTrashed()
986
977
->where('airline_id', 1)
987
978
->restore();
988
979
@@ -1036,7 +1027,7 @@ Eloquent содержит методы `isDirty`, `isClean` и `wasChanged` дл
1036
1027
<?php
1037
1028
1038
1029
namespace App\Models;
1039
-
1030
+
1040
1031
use Illuminate\Database\Eloquent\Builder;
1041
1032
use Illuminate\Database\Eloquent\Model;
1042
1033
use Illuminate\Database\Eloquent\Prunable;
@@ -1076,7 +1067,6 @@ Eloquent содержит методы `isDirty`, `isClean` и `wasChanged` дл
1076
1067
'--model' => [Address::class, Flight::class],
1077
1068
])->daily();
1078
1069
1079
-
1080
1070
Если вы хотите исключить обрезку определенных моделей при обрезке всех других обнаруженных моделей, вы можете использовать опцию `--except`:
Или же, вы можете вручную зарегистрировать наблюдателя, вызвав метод `observe` модели, которую вы хотите наблюдать. Вы можете зарегистрировать наблюдателей в методе `boot` класса `AppServiceProvider` вашего приложения:
0 commit comments