Skip to content

Commit 0fde22c

Browse files
authored
Update eloquent.md
1 parent ad16fd6 commit 0fde22c

File tree

1 file changed

+21
-33
lines changed

1 file changed

+21
-33
lines changed

eloquent.md

+21-33
Original file line numberDiff line numberDiff line change
@@ -16,28 +16,25 @@ Laravel содержит [ORM-библиотеку](https://ru.wikipedia.org/wik
1616

1717
Если вы новичок в Laravel, не стесняйтесь присоединиться к [Laravel Bootcamp](https://bootcamp.laravel.com). Laravel Bootcamp поможет вам создать свое первое приложение Laravel с использованием Eloquent. Это отличный способ получить обзор всего, что предлагают Laravel и Eloquent.
1818

19-
2019
<a name="generating-model-classes"></a>
2120
## Генерация классов модели
2221

2322
Модели расширяют класс `Illuminate\Database\Eloquent\Model`. Чтобы сгенерировать новую модель Eloquent, используйте [Artisan](artisan)-команду `make:model`. Эта команда поместит новый класс модели в каталог `app/Models` вашего приложения:
2423

25-
2624
```shell
2725
php artisan make:model Flight
2826
```
2927

3028
При создании модели вы можете сгенерировать [миграцию БД](/docs/{{version}}/migrations), используя параметр `--migration` или `-m`:
3129

32-
3330
```shell
3431
php artisan make:model Flight --migration
3532
```
3633

3734
При создании модели вы можете также создавать другие различные типы классов, например фабрики, наполнители (seeders), политики, контроллеры и запросы форм. Кроме того, эти параметры можно комбинировать для создания сразу нескольких классов:
3835

3936
```shell
40-
# Создать модель и класс FlightFactory ...
37+
# Создать модель и класс FlightFactory...
4138
php artisan make:model Flight --factory
4239
php artisan make:model Flight -f
4340

@@ -90,7 +87,7 @@ php artisan model:show Flight
9087

9188
class Flight extends Model
9289
{
93-
// ...
90+
// ...
9491
}
9592

9693
<a name="table-names"></a>
@@ -171,14 +168,12 @@ Eloquent также предполагает, что в соответствую
171168
Eloquent требует, чтобы каждая модель имела по крайней мере один однозначно идентифицирующий «ID», который может служить ее первичным ключом. «Составные» первичные ключи не поддерживаются моделями Eloquent. Однако вы можете добавить дополнительные многоколоночные уникальные индексы к таблицам базы данных в дополнение к однозначно определяющему (уникальному) первичному ключу таблицы.
172169

173170
<a name="uuid-and-ulid-keys"></a>
174-
175171
### UUID и ULID ключи
176172

177173
Вместо использования автоинкрементных целых чисел в качестве первичных ключей вашей модели Eloquent вы можете выбрать использование UUID. UUID - это уникальные буквенно-цифровые идентификаторы длиной 36 символов.
178174

179175
Если вы хотите, чтобы модель использовала ключ UUID вместо автоинкрементного целочисленного ключа, вы можете использовать трейт `Illuminate\Database\Eloquent\Concerns\HasUuids` в модели. Конечно же, убедитесь, что у модели есть [столбец первичного ключа, эквивалентный UUID](/docs/{{version}}/migrations#column-method-uuid)::
180176

181-
182177
use Illuminate\Database\Eloquent\Concerns\HasUuids;
183178
use Illuminate\Database\Eloquent\Model;
184179

@@ -193,7 +188,6 @@ Eloquent требует, чтобы каждая модель имела по к
193188

194189
$article->id; // "8f8e8478-9035-4d23-b9a7-62f4d2612ce5"
195190

196-
197191
По умолчанию трейт `HasUuids` генерирует ["упорядоченные" UUID](/docs/{{version}}/strings#method-str-ordered-uuid) для ваших моделей. Эти UUID более эффективны для индексированного хранения в базе данных, поскольку их можно лексикографически сортировать.
198192

199193
Вы можете переопределить процесс генерации UUID для определенной модели, определив метод `newUniqueId` в модели. Кроме того, вы можете указать, какие столбцы должны получать UUID, определив метод `uniqueIds` в модели:
@@ -351,7 +345,6 @@ public function boot(): void
351345
}
352346
```
353347

354-
355348
Также вы можете указать Laravel генерировать исключение при попытке назначения неподлежащего назначению атрибута, вызвав метод `preventSilentlyDiscardingAttributes`. Это может помочь предотвратить неожиданные ошибки во время локальной разработки, когда попытаетесь присвоить значение, который не был добавлен в массив `fillable` модели:
356349

357350
```php
@@ -565,24 +558,23 @@ Eloquent также предлагает поддержку расширенны
565558

566559
use App\Models\Flight;
567560

568-
// Получить модель по ее первичному ключу ...
561+
// Получить модель по ее первичному ключу...
569562
$flight = Flight::find(1);
570563

571-
// Получить первую модель, соответствующую условиям запроса ...
564+
// Получить первую модель, соответствующую условиям запроса...
572565
$flight = Flight::where('active', 1)->first();
573566

574-
// Альтернатива извлечению первой модели, соответствующей условиям запроса ...
575-
$flight = App\Models\Flight::firstWhere('active', 1);
567+
// Альтернатива извлечению первой модели, соответствующей условиям запроса...
568+
$flight = Flight::firstWhere('active', 1);
576569

577570
По желанию можно выполнить какое-либо другое действие, если результаты не найдены. Методы `findOr` и `firstOr` вернут один экземпляр модели или, если результаты не найдены, выполнят переданное замыкание. Значение, возвращенное замыканием, будет считаться результатом метода:
578571

579-
580572
$flight = Flight::findOr(1, function () {
581573
// ...
582574
});
583575

584576
$flight = Flight::where('legs', '>', 3)->firstOr(function () {
585-
// ...
577+
// ...
586578
});
587579

588580
<a name="not-found-exceptions"></a>
@@ -611,7 +603,7 @@ Eloquent также предлагает поддержку расширенны
611603

612604
use App\Models\Flight;
613605

614-
// Получить рейс по `name` или создать его, если его не существует ...
606+
// Получить рейс по `name` или создать его, если его не существует...
615607
$flight = Flight::firstOrCreate([
616608
'name' => 'London to Paris'
617609
]);
@@ -666,7 +658,7 @@ Eloquent также предлагает поддержку расширенны
666658
*/
667659
public function store(Request $request): RedirectResponse
668660
{
669-
// Валидация запроса ...
661+
// Валидация запроса...
670662

671663
$flight = new Flight;
672664

@@ -787,7 +779,7 @@ Eloquent содержит методы `isDirty`, `isClean` и `wasChanged` дл
787779
$user->name; // Jack
788780

789781
$user->getOriginal('name'); // John
790-
$user->getOriginal(); // Массив исходных атрибутов ...
782+
$user->getOriginal(); // Массив исходных атрибутов...
791783

792784
<a name="mass-assignment"></a>
793785
### Массовое присвоение
@@ -873,7 +865,6 @@ Eloquent содержит методы `isDirty`, `isClean` и `wasChanged` дл
873865
Model::preventSilentlyDiscardingAttributes($this->app->isLocal());
874866
}
875867

876-
877868
<a name="upserts"></a>
878869
### Обновления-вставки
879870

@@ -884,7 +875,7 @@ Eloquent содержит методы `isDirty`, `isClean` и `wasChanged` дл
884875
['departure' => 'Chicago', 'destination' => 'New York', 'price' => 150]
885876
], uniqueBy: ['departure', 'destination'], update: ['price']);
886877

887-
> [!WARNING]
878+
> [!WARNING]
888879
> Все базы данных, кроме SQL Server, требуют, чтобы столбцы второго аргумента метода `upsert` имели "primary" или "unique" индекс. Кроме того, драйверы базы данных MariaDB и MySQL игнорируют второй аргумент метода `upsert` и всегда используют "primary" и "unique" индексы таблицы для обнаружения существующих записей.
889880
890881
<a name="deleting-models"></a>
@@ -955,7 +946,7 @@ Eloquent содержит методы `isDirty`, `isClean` и `wasChanged` дл
955946
Вам также следует добавить столбец `deleted_at` в таблицу БД. [Построитель схемы](/docs/{{version}}/migrations) Laravel содержит метод для создания этого столбца:
956947

957948
use Illuminate\Database\Schema\Blueprint;
958-
use Illuminate\Facades\Schema;
949+
use Illuminate\Support\Facades\Schema;
959950

960951
Schema::table('flights', function (Blueprint $table) {
961952
$table->softDeletes();
@@ -982,7 +973,7 @@ Eloquent содержит методы `isDirty`, `isClean` и `wasChanged` дл
982973

983974
Вы также можете использовать метод `restore` в запросе для восстановления нескольких моделей. Опять же, как и другие «массовые» операции, это не вызовет никаких событий модели для восстанавливаемых моделей:
984975

985-
App\Models\Flight::withTrashed()
976+
Flight::withTrashed()
986977
->where('airline_id', 1)
987978
->restore();
988979

@@ -1036,7 +1027,7 @@ Eloquent содержит методы `isDirty`, `isClean` и `wasChanged` дл
10361027
<?php
10371028

10381029
namespace App\Models;
1039-
1030+
10401031
use Illuminate\Database\Eloquent\Builder;
10411032
use Illuminate\Database\Eloquent\Model;
10421033
use Illuminate\Database\Eloquent\Prunable;
@@ -1076,7 +1067,6 @@ Eloquent содержит методы `isDirty`, `isClean` и `wasChanged` дл
10761067
'--model' => [Address::class, Flight::class],
10771068
])->daily();
10781069

1079-
10801070
Если вы хотите исключить обрезку определенных моделей при обрезке всех других обнаруженных моделей, вы можете использовать опцию `--except`:
10811071

10821072
Schedule::command('model:prune', [
@@ -1177,7 +1167,7 @@ php artisan make:scope AncientScope
11771167

11781168
<?php
11791169

1180-
namespace App\Models\Scopes
1170+
namespace App\Models\Scopes;
11811171

11821172
use Illuminate\Database\Eloquent\Builder;
11831173
use Illuminate\Database\Eloquent\Model;
@@ -1219,9 +1209,9 @@ php artisan make:scope AncientScope
12191209

12201210
<?php
12211211

1222-
use App\Models\Scopes\AncientScope;
1212+
namespace App\Models;
12231213

1224-
use App\Scopes\AncientScope;
1214+
use App\Models\Scopes\AncientScope;
12251215
use Illuminate\Database\Eloquent\Model;
12261216

12271217
class User extends Model
@@ -1279,10 +1269,10 @@ Eloquent также позволяет вам определять глобал
12791269

12801270
Если вы хотите удалить несколько или даже все глобальные диапазоны запроса, вы можете использовать метод `withoutGlobalScopes`:
12811271

1282-
// Игнорировать все глобальные диапазоны ...
1272+
// Игнорировать все глобальные диапазоны...
12831273
User::withoutGlobalScopes()->get();
12841274

1285-
// Игнорировать некоторые глобальные диапазоны ...
1275+
// Игнорировать некоторые глобальные диапазоны...
12861276
User::withoutGlobalScopes([
12871277
FirstScope::class, SecondScope::class
12881278
])->get();
@@ -1358,7 +1348,7 @@ Eloquent также позволяет вам определять глобал
13581348
*/
13591349
public function scopeOfType(Builder $query, string $type): void
13601350
{
1361-
return $query->where('type', $type);
1351+
$query->where('type', $type);
13621352
}
13631353
}
13641354

@@ -1532,7 +1522,6 @@ php artisan make:observer UserObserver --model=User
15321522
//
15331523
}
15341524

1535-
15361525
Или же, вы можете вручную зарегистрировать наблюдателя, вызвав метод `observe` модели, которую вы хотите наблюдать. Вы можете зарегистрировать наблюдателей в методе `boot` класса `AppServiceProvider` вашего приложения:
15371526

15381527
use App\Models\User;
@@ -1561,7 +1550,7 @@ php artisan make:observer UserObserver --model=User
15611550
use App\Models\User;
15621551
use Illuminate\Contracts\Events\ShouldHandleEventsAfterCommit;
15631552

1564-
class UserObserver
1553+
class UserObserver implements ShouldHandleEventsAfterCommit
15651554
{
15661555
/**
15671556
* Обработать событие «created» модели User.
@@ -1596,7 +1585,6 @@ php artisan make:observer UserObserver --model=User
15961585

15971586
$user->saveQuietly();
15981587

1599-
16001588
Вы также можете "обновить", "удалить", "мягко удалить", "восстановить" и "реплицировать" заданную модель без отправки каких-либо событий:
16011589

16021590
$user->deleteQuietly();

0 commit comments

Comments
 (0)