Skip to content

lee-to/laravel-naming-conventions

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

15 Commits
Β 
Β 

Repository files navigation

ΠšΠΎΠ½Π²Π΅Π½Ρ†ΠΈΡ Π½Π°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠΉ Π² Laravel

Для упрощСния взаимодСйствия Π² Laravel ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Π½Ρ‹ ΠΏΡ€Π°Π²ΠΈΠ»Π° Π½Π°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠΉ. ΠŸΡ€Π°Π²ΠΈΠ»Π° Π½ΡƒΠΆΠ½Ρ‹ Π²Π΅Π·Π΄Π΅, Π° Ссли ΠΏΡ€Π°Π²ΠΈΠ»Π° Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π½Π°Ρ‚ΡŒ Π½ΠΎ ΠΈ ΡΠΎΠ±Π»ΡŽΠ΄Π°Ρ‚ΡŒ, Ρ‚ΠΎ это Π΄Π°Ρ‘Ρ‚ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ прирост Π² скорости Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.

Laravel наш ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈΠΊ, Π½ΠΎ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠΌΠΎΠ³Π°Ρ‚ΡŒ лишь Π² Ρ‚ΠΎΠΌ случаС, Ссли Π²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ ΠΏΠΎ Π΅Π³ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ! ΠŸΡ€ΠΈΠΌΠ΅Π½ΡΡ ΠΊΠΎΠ½Π²Π΅Π½Ρ†ΠΈΡŽ Π½Π°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠΉ Laravel ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ автоматичСски Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π½ΡƒΠΆΠ½Ρ‹Π΅ зависимыС сущности!

По большСй части конвСнция Π½Π°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠΉ ΠΎΡ…Π²Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ слой взаимодСйствия с Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ….

ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ½Π²Π΅Π½Ρ†ΠΈΠΈ Π½Π°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠΉ Π² Laravel = простой, чистый ΠΈ Π»Π°ΠΊΠΎΠ½ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠΎΠ΄.

Погнали!

ОглавлСниС

  1. ВсСгда Π² названиях ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ‚ΠΎΡ‡Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ слова Π½Π° английском. НС Π½Π°Π΄ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ транслит.
    Если Π½Π΅ Π·Π½Π°Π΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ слова ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ ΠΎΠ½ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΏΠΈΡˆΠ΅Ρ‚ΡΡ - просто Π½Π°ΠΉΠ΄ΠΈΡ‚Π΅ Π΅Π³ΠΎ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄. Π—Π°ΠΎΠ΄Π½ΠΎ ΠΈ словарный запас Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚Π΅)
  2. Π˜Π·Π±Π΅Π³Π°ΠΉΡ‚Π΅ ошибок Π² написании.
  3. Π‘Ρ‚Π°Ρ€Π°ΠΉΡ‚Π΅ΡΡŒ ΠΏΠΎΠ΄Π±ΠΈΡ€Π°Ρ‚ΡŒ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ сразу Π±Ρ‹Π»ΠΎ понятно, Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ содСрТится Π² ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠΈ.
  4. НС сокращайтС названия Π±Π΅Π· острой нСобходимости.
    // ΠΏΠ»ΠΎΡ…ΠΎ
    $acc
    $conn
    $descr
    prepResp()
    regEvtHandler()
    updCom()
       
    // Ρ…ΠΎΡ€ΠΎΡˆΠΎ
    $account
    $connection
    $description
    prepareResponse()
    registerEventHandler()
    updateComment()

Для ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½ΠΈΠΈ Π½Π°Π·Π²Π°Π½ΠΈΠΉ Ρ‚Π°Π±Π»ΠΈΡ† принято ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π° Π²ΠΎ мноТСствСнном числС с Π½ΠΎΡ‚Π°Ρ†ΠΈΠ΅ΠΉ snake_case:

snake_case β€” ΡΡ‚ΠΈΠ»ΡŒ написания составных слов, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ нСсколько слов Ρ€Π°Π·Π΄Π΅Π»ΡΡŽΡ‚ΡΡ символом подчСркивания. Π‘Π»ΠΎΠ²Π° ΠΊΠ°ΠΊ Π±Ρ‹ ΠΏΠΎΠ»Π·ΡƒΡ‚ ΠΏΠΎ строкС, Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ получаСтся Π΄Π»ΠΈ_ΠΈ_ΠΈΠ½Π½ΠΎΠ΅, ΠΊΠ°ΠΊ змСя, Π½Π°Π·Π²Π°Π½ΠΈΠ΅. Π’ Π΄Π°Π½Π½ΠΎΠΌ Π³Π°ΠΉΠ΄Π΅ snake_case всСгда Π² Π½ΠΈΠΆΠ½Π΅ΠΌ рСгистрС

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹:

  • users
  • products
  • order_products

Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π‘Π²ΡΠ·ΡƒΡŽΡ‰ΠΈΠ΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ для ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΉ BelongsToMany.

ΠŸΡ€ΠΈΠΌΠ΅Π½ΡΠ΅ΠΌ snake_case + ΠΈΠΌΠ΅Π½Π° Π΄Π²ΡƒΡ… Ρ‚Π°Π±Π»ΠΈΡ†, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄Π΅ΠΌ ΡΠ²ΡΠ·Ρ‹Π²Π°Ρ‚ΡŒ, Π² СдинствСнном числС. Π’ качСствС раздСлитСля ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ Ρ‚Π°Π±Π»ΠΈΡ† ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ символ Π½ΠΈΠΆΠ½Π΅Π³ΠΎ подчёркивания _.

Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ сущности ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΌ Π² Π°Π»Ρ„Π°Π²ΠΈΡ‚Π½ΠΎΠΌ порядкС.

Π Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅: Π΅ΡΡ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ users ΠΈ tasks, ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΠΌ ΠΎΠ±Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π² СдинствСнноС число ΠΈ раздСляСм Ρ‡Π΅Ρ€Π΅Π· ΠΏΠΎΠ΄Ρ‡Π΅Ρ€ΠΊΠΈΠ²Π°Π½ΠΈΠ΅. Π‘ΡƒΠΊΠ²Π° t Π² Π°Π»Ρ„Π°Π²ΠΈΡ‚Π΅ слСдуСт Ρ€Π°Π½ΡŒΡˆΠ΅ u, поэтому Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ связи Π΄Π²ΡƒΡ… Ρ‚Π°Π±Π»ΠΈΡ† Π±ΡƒΠ΄Π΅Ρ‚ - task_user.

Ну ΠΈΠ»ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ послоТнСС: order_products ΠΈ properties! Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ - order_product_property.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹:

  • task_user
  • event_place
  • order_product_property

ВсС просто - snake_case. И Π½Π΅ Π·Π°Π±Ρ‹Π²Π°ΠΉΡ‚Π΅ ΠΎΠ±Ρ‰ΠΈΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»Π° ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΡ‹ писали Π² ΠΎΠ΄Π½ΠΎΠΈΠΌΠ΅Π½Π½ΠΎΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹:

  • created_at
  • seo_title

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Laravel ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ id.

snake_case Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ - имя Ρ‚Π°Π±Π»ΠΈΡ†Π° Π² СдинствСнном числС, Π΄Π°Π»Π΅Π΅ ΠΏΠΎΠ΄Ρ‡Π΅Ρ€ΠΊΠΈΠ²Π°Π½ΠΈΠ΅ _ ΠΈ Π΄Π°Π»Π΅Π΅ Primary key ('id'). ΠŸΡ€ΠΈΠΌΠ΅Ρ€ - страна ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, Π³Π΄Π΅ всС страны Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ countries, ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ users ΠΈΠΌΠ΅Π΅Ρ‚ foreign key для связи со страной - country_id, Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ {связанная_Ρ‚Π°Π±Π»ΠΈΡ†Π°_Π²_СдинствСнном_числС}_{primary_key_связанной_Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹}

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹:

  • country_id
  • order_product_id

PascalCase Π² СдинствСнном числС

PascalCase β€” это ΡΡ‚ΠΈΠ»ΡŒ написания ΠΈΠΌΠ΅Π½, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ составныС слова названия ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° (Π² Ρ‚ΠΎΠΌ числС ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠ΅ слово) ΠΏΠΈΡˆΡƒΡ‚ΡΡ слитно, ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ Π½ΠΎΠ²ΠΎΠ΅ слово начинаСтся с большой Π±ΡƒΠΊΠ²Ρ‹. ΠŸΡ€ΠΈΠΌΠ΅Ρ€: MyVar, MyBestProgramm, WorkArray. Паскаль нотация ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для Π½Π°Π·Π²Π°Π½ΠΈΠΉ классов ΠΈ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΠΎΠ»Π΅ΠΉ Π΄Π°Π½Π½Ρ‹Ρ…, Π° Ρ‚Π°ΠΊΠΆΠ΅ имСнования ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.

Если ΠΌΡ‹ соблюдали ΠΊΠΎΠ½Π²Π΅Π½Ρ†ΠΈΡŽ Π½Π°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠΉ для Ρ‚Π°Π±Π»ΠΈΡ†, Ρ‚ΠΎ Laravel автоматичСски ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ для ΠΌΠΎΠ΄Π΅Π»ΠΈ. Как? ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ Π²Π°ΡˆΡƒ модСль Π² snake_case Π² Π½ΠΈΠΆΠ½Π΅ΠΌ рСгистрС Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ подчСркивания '_' ΠΈ ΠΏΠ΅Ρ€Π΅Π²Π΅Π΄Ρ‘Ρ‚ Π² мноТСствСнноС число. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡΡ имя Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹.

Π’ ΠΈΡ‚ΠΎΠ³Π΅ User Π±ΡƒΠ΄Π΅Ρ‚ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ ΠΊ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ users, OrderProduct ΠΊ order_products

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΡ ΠΊΠΎΠ½Π²Π΅Π½Ρ†ΠΈΠΈ Π½Π°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠΉ:

  • Если Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΡƒΠΊΠ°Π·Π°Π½ΠΎ Π½Π΅ Π² snake_case (ΠΈΠ»ΠΈ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ отличаСтся ΠΎΡ‚ названия ΠΌΠΎΠ΄Π΅Π»ΠΈ) потрСбуСтся ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π² ΠΌΠΎΠ΄Π΅Π»ΠΈ свойство, ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‰Π΅Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ: protected $table = 'tableName';
  • Ρ‚ΠΎΠΆΠ΅ самоС Π² случаС с primary key - protected $primaryKey = 'primaryKey';
  • ΠΈ Π΅Ρ‰Π΅ масса ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹Ρ… ΡƒΠΊΠ°Π·Π°Π½ΠΈΠΉ для ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΉ)

ДирСктория ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ

app/Models

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹:

  • User
  • Product
  • OrderProduct

ΠŸΡ€ΠΈ ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½ΠΈΠΈ названия ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ UPPER_CASE с Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΌ подчСркивания.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹:

class Document
{
    const STATUS_ACTIVE = 1;
    const STATUS_DELETE = 2;
    const STATUS_ARCHIVE = 9;
}

Бвойства ΠΌΠΎΠ΄Π΅Π»ΠΈ ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ Π½Π° поля Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊΠΈΠ΅ ΠΆΠ΅ наимСнования Π² snake_case.

Бтановятся доступными Π·Π° счСт магичСских php ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ². ΠžΠ±Ρ€Π°Ρ‰Π°ΡΡΡŒ ΠΊ свойствам ΠΌΠΎΠ΄Π΅Π»ΠΈ, Laravel автоматичСски соотнСсСт ΠΈΡ… с полями Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ (Ссли Ρ‚Π°ΠΊΠΈΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚).

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹:

  • $model->created_at
  • $model->seo_title

ΠŸΡ€ΠΈ ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½ΠΈΠΈ названия ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ camelCase:

camelCase - ΡΡ‚ΠΈΠ»ΡŒ написания составных слов, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ нСсколько слов ΠΏΠΈΡˆΡƒΡ‚ΡΡ слитно Π±Π΅Π· ΠΏΡ€ΠΎΠ±Π΅Π»ΠΎΠ², ΠΏΡ€ΠΈ этом ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ слово Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„Ρ€Π°Π·Ρ‹ ΠΏΠΈΡˆΠ΅Ρ‚ΡΡ с прописной Π±ΡƒΠΊΠ²Ρ‹. НачинаСтся с малСнькой Π±ΡƒΠΊΠ²Ρ‹. И получаСтся Π²Π΅Ρ€Π±Π»ΡŽΠ΄ (camel) с Π΅Π³ΠΎ Π³ΠΎΡ€Π±Π°ΠΌΠΈ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹:

  • getSomething()

НаимСнования поля Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ приводится ΠΊ camelCase ΠΈ измСняСтся Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ ΠžΡ‚Π»ΠΈΡ‡Π½ΠΎ расписано Π² ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ

camelCase с прСфиксом scope ΠžΡ‚Π»ΠΈΡ‡Π½ΠΎ расписано Π² ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ

ВсС просто - camelCase для ΠΌΠΎΠ΄Π΅Π»ΠΈ с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΡ‹ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅ΠΌ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅. Если ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ ΠΊ ΠΎΠ΄Π½ΠΎΠΉ записи, Ρ‚ΠΎΠ³Π΄Π° ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ оформляСм Π² СдинствСнном числС, Π° Ссли нСсколько - Ρ‚ΠΎ Π²ΠΎ мноТСствСнном числС!

Рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ для ΠΌΠΎΠ΄Π΅Π»ΠΈ User c Ρ€Π°Π·Π½Ρ‹ΠΌ Ρ‚ΠΈΠΏΠΎΠΌ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΉ ΠΊ ΠΌΠΎΠ΄Π΅Π»ΠΈ Country.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹:

  • belongsTo, hasOne, hasOneThrough, morphOne = country()
  • belongsToMany, hasMany, hasManyThrough, morphMany, morphToMany = countries()

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΡ ΠΊΠΎΠ½Π²Π΅Π½Ρ†ΠΈΠΈ Π½Π°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠΉ:

  • ΠœΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ foreign_key return $this->hasOne(Phone::class, 'foreign_key');
  • ΠœΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ foreign_key ΠΈ local_key return $this->hasOne(Phone::class, 'foreign_key', 'local_key');
  • ΠœΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΈ ΡΠ²ΡΠ·ΡƒΡŽΡ‰ΡƒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ ΠΈ ΠΊΠ»ΡŽΡ‡ΠΈ return $this->belongsToMany(Role::class, 'role_user', 'user_id', 'role_id');

php artisan make:migration migration_name

Команда Π²Ρ‹ΡˆΠ΅ просто создаст пустой Ρ„Π°ΠΉΠ» ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ, Π³Π΄Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ up ΠΈ down Π±ΡƒΠ΄ΡƒΡ‚ пустыми.

public function up()
{
  //
}

public function down()
{
  //
}

Но ΠΌΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ Π²Π»ΠΈΡΡ‚ΡŒ Π½Π° содСрТимоС ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΉ, Ссли Π±ΡƒΠ΄Π΅ΠΌ ΠΏΡ€ΠΈΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΏΡ€Π°Π²ΠΈΠ» наимСнования, Ρ‚Π΅ΠΌ самым упрощая Π½Π°ΠΌ Тизнь.

php artisan make:migration create_users_table

ΠœΡ‹ Π΄Π°Π»ΠΈ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ…ΠΎΡ‚ΠΈΠΌ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ users - create_{Имя_Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹}_table

ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ здСсь create_{Имя_Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹}, Π° Π²ΠΎΡ‚ table Π² ΠΊΠΎΠ½Ρ†Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ

Π’ ΠΈΡ‚ΠΎΠ³Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ:

public function up()
{
    Schema::create('users', function (Blueprint $table) {
        $table->id();
        $table->timestamps();
    });
}

public function down()
{
    Schema::dropIfExists('users');
}

php artisan make:migration add_column_to_users_table

Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ сообщаСм Laravel ΠΎ нашСм ΠΆΠ΅Π»Π°Π½ΠΈΠΈ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ ΠΈ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ здСсь to_{Имя_Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹}, Π° Π²ΠΎΡ‚ table Π² ΠΊΠΎΠ½Ρ†Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ

public function up()
{
    Schema::table('users', function (Blueprint $table) {
        //
    });
}

public function down()
{
    Schema::table('users', function (Blueprint $table) {
        //
    });
}

ДирСктория ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ

database/factories Π’Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ с Ρ„Π°Π±Ρ€ΠΈΠΊΠ°ΠΌΠΈ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ посрСдством ΠΌΠ΅Ρ‚ΠΎΠ΄Π° factory() Π² модСлях. МодСль автоматичСски ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ ΠΊ ΠΊΠ°ΠΊΠΎΠΌΡƒ классу Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ Π΅ΠΉ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Ссли ΡΠΎΠ±Π»ΡŽΠ΄Π°Ρ‚ΡŒ ΠΊΠΎΠ½Π²Π΅Π½Ρ†ΠΈΡŽ Π½Π°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠΉ.

Π’Π΅ ΠΆΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»Π° Ρ‡Ρ‚ΠΎ ΠΈ для ΠΌΠΎΠ΄Π΅Π»ΠΈ, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ добавляСм суффикс Factory! Π€ΠΎΡ€ΠΌΠ°Ρ‚ - {ИмяМодСли}Factory

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹:

  • МодСль User, Π° Ρ„Π°Π±Ρ€ΠΈΠΊΠ° UserFactory
  • МодСль OrderProduct, Ρ„Π°Π±Ρ€ΠΈΠΊΠ° OrderProductFactory

ДирСктория ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ

app/Policies

Laravel ΠΌΠΎΠΆΠ΅Ρ‚ автоматичСски ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΡƒ для ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΏΡ€ΠΈ соблюдСнии ΠΊΠΎΠ½Π²Π΅Π½Ρ†ΠΈΠΈ Π½Π°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠΉ. Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΡƒ Π½Π΅ трСбуСтся Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ "Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ".

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρ‚Π΅ ΠΆΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»Π°, Ρ‡Ρ‚ΠΎ ΠΈ для ΠΌΠΎΠ΄Π΅Π»ΠΈ, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ добавляСм суффикс Policy! Π€ΠΎΡ€ΠΌΠ°Ρ‚ - {ИмяМодСли}Policy

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹:

  • МодСль User, Π° ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° UserPolicy
  • МодСль OrderProduct, ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° OrderProductPolicy

ΠŸΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° Π½Π°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠΉ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… сущностСй

Никак Π½Π΅ Π²Π»ΠΈΡΡŽΡ‚ Π½Π° взаимодСйствиС с Laravel, Π½ΠΎ Π΄Π΅Π»Π°ΡŽΡ‚ ΠΊΠΎΠ΄ понятнСС для всСх ΠΊΡ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ с Π½ΠΈΠΌ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ.

PascalCase Π²ΠΎ мноТСствСнном числС.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹:

  • Models
  • QueryBuilders
  • Filters

Laravel Π΄Π°Π΅Ρ‚ свободу Π² располоТСнии сущностСй ΠΈ Π½Π°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΉ.

Как ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ссли ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ DDD ΠΏΠΎΠ΄Ρ…ΠΎΠ΄, Ρ‚ΠΎ нас Π½ΠΈΠΊΡ‚ΠΎ Π½Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ пСрСнСсти всю бизнСс Π»ΠΎΠ³ΠΈΠΊΡƒ Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ src. Π’Π°ΠΊΠΆΠ΅ пСрСнСсти Π² src /app ΠΈ Π½Π°Π·Π²Π°Ρ‚ΡŒ скаТСм App

Но сами Π³Ρ€ΡƒΠΏΠΏΡ‹ абстракций Π² Ρ…ΠΎΡ€ΠΎΡˆΠΈΡ… ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°Ρ… ΠΈΠΌΠ΅Π½ΡƒΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ΡˆΠ΅.

ДирСктория ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ

app/Http/Controllers

PascalCase Π² СдинствСнном числС c суффиксом Controller.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹

  • CatalogController
  • ProductController
  • OrderController
  • BlogController

snake_case Π»ΠΈΠ±ΠΎ kebab-case, ΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ΡΡŒ Π·Π΄Ρ€Π°Π²Ρ‹ΠΌ смыслом выбирая ΠΌΠ΅ΠΆΠ΄Ρƒ СдинствСнным Π»ΠΈΠ±ΠΎ мноТСствСнным числом. apiResource ΠΈ resource ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π²ΠΎ мноТСствСнном числС, нСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ остаСтся Π² СдинствСнном числС.

kebab-case ΡΡ‚ΠΈΠ»ΡŒ написания Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ слова Π² Π½ΠΈΠΆΠ½Π΅ΠΌ рСгистрС Ρ€Π°Π·Π΄Π΅Π»ΡΡŽΡ‚ символом дСфиса. МоТно ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ слова ΠΏΡ€ΠΈ этом ΠΊΠ°ΠΊ Π±Ρ‹ Π½Π°ΡΠ°ΠΆΠΈΠ²Π°ΡŽΡ‚ Π½Π° ΡˆΠ°ΠΌΠΏΡƒΡ€ β€” Π²ΠΎΡ‚ ΠΈ получаСтся ΡˆΠ°ΡˆΠ»Ρ‹ΠΊ (kebab).

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹

  • Route::get('catalog', CatalogController::class)
  • Route::get('categories', CategoryController::class)
  • Route::resource('users', UserController::class)
  • Route::apiResource('users', UserController::class)

views Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ

snake_case Π²ΠΎ мноТСствСнном числС, нСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ остаСтся Π² СдинствСнном числС.

blade ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹

snake_case

ΠšΠ»ΡŽΡ‡ΠΈ Π² snake_case

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published