Laravel ile bagli suallar

GameKing

Məhşur istifadəçi
Silver istifadeci
Salam, bu movzuda laravel ile bagli problemlerin helli ile bagli suallarimi qeyd edecem.

Ilk sualim budur ki php artisan migrate ve ya php artisan migrate:refresh cli kodunu ise saldigimda, videodaki problem ile qarsilasiram, bu problemi nece hell ede bilerem?

Video: Demo Link
 
Bilen yoxdur deyesen?!
Hemin problem demek olar ki butun versiyalarda var ve biri izah ede bilermi ki sehvlik neden qaynaqlanir?
 
streamable.com islemedi, probleme baxammadim. Terminalda peoblem ne cixir?
 
migration fayıllarını incələmək lazımdır

php artisan migrate yeni migration fayıllarını migrate etdiyini yəqin bilirsiniz.
lazım olsa team yazarsız qoşulub həll edərik problemi.
 
Problemi,

/app/Providers/AppServiceProvider.php

faylinda boot adinda class metod icerisinde duzelis ederek hell etdim, bilmeyenler ucun kodu paylasiram.

PHP:
use Illuminate\Support\Facades\Schema;

/**
 * Bootstrap any application services.
 *
 * @return void
 */
public function boot()
{
    Schema::defaultStringLength(191);
}

Hemin bu kod varchar data type deyerine sahib olan columns-lar ucun max uzunlugu 191 olaraq teyin edir ve belelikle melumatlari seed ederken problem yasanmir.
 
@LOCALHOST,
Beli bilirem, tşk, problem artiq hell olundu, laravel ile bagli nese problem olsa burada mesaj olaraq paylasacam muzakire edib hell yolunu tapariq, belelikle bilmeyenler de oyrenmis olar
 
@LOCALHOST,
Beli bilirem, tşk, problem artiq hell olundu, laravel ile bagli nese problem olsa burada mesaj olaraq paylasacam muzakire edib hell yolunu tapariq, belelikle bilmeyenler de oyrenmis olar
Yaxşı elədiniz.
Məlumat üçün bildirim ki, laravelin life cyclesi yüklənəndə hər requestdə servis provayderlər çağırılır.
App servis provayderində ocür həll edilməsi performans baxımından biraz alternativ deyil.
Seçim olaraq belə bir şey təklif edirəm migrationlarda mysql string tiplərinin digərlərini seçəsiniz string, tinyString, longText, MediumText
 
@LOCALHOST,

PHP:
$table->string('name', 191);

Bu usul da isleyir, lakin hazir birdefelik default length-i teyin etmek varken, her column ucun oturub 191 deyerin her sutuna gore tekrar-tekrar yazmaq mence mentiqli deyil, o ki qaldi performans baximindan her hansi bir problem yasamadim hemin kodu elave etdiyim zaman.
 
@LOCALHOST,
Onu da qeyd edim ki bu problem, laravel 7 versiyasinda hellini tapib, laravelin saytinda bu kod haqqinda etrafli qeyd olunub, her halda performansda problem yasansaydi resmi saytinda kodu istifafe etmeyi teklif etmezdiler.

Laravel 7.documentation
 
By default, Laravel uses the utf8mb4 character set. If you are running a version of MySQL older than the 5.7.7 release or MariaDB older than the 10.2.2 release, you may need to manually configure the default string length generated by migrations in order for MySQL to create indexes for them. You may configure the default string length by calling the Schema::defaultStringLength method within the boot method of your App\Providers\AppServiceProvider class:

PHP:
use Illuminate\Support\Facades\Schema;
 
/**
 * Bootstrap any application services.
 */
public function boot(): void
{
    Schema::defaultStringLength(191);
}

Alternatively, you may enable the innodb_large_prefix option for your database. Refer to your database's documentation for instructions on how to properly enable this option.


Varsayılan olaraq, Laravel utf8mb4 simvol dəstindən istifadə edir.

Əgər siz MySQL-in 5.7.7 versiyasından köhnə versiyanı və ya MariaDB-nin 10.2.2 versiyasından köhnə versiyasını işlədirsinizsə, MySQL-in onlar üçün indekslər yaratması üçün miqrasiyaların yaratdığı standart mətn uzunluğunu əl ilə konfiqurasiya etməlisiniz.

Proqramınızın boot metodu daxilində Schema::defaultStringLength metodunu çağıraraq standart mətn uzunluğunu konfiqurasiya edə bilərsiniz.

PHP:
use Illuminate\Support\Facades\Schema;
 
/**
 * Bootstrap any application services.
 */
public function boot(): void
{
    Schema::defaultStringLength(191);
}

Alternativ olaraq, db bazanız üçün innodb_large_prefix seçimini aktivləşdirə bilərsiniz.

Bu seçimi düzgün şəkildə aktivləşdirmək üçün təlimatlar üçün db bazanızın documentation bölməsinə baxın.
 
@LOCALHOST,

PHP:
$table->string('name', 191);

Bu usul da isleyir, lakin hazir birdefelik default length-i teyin etmek varken, her column ucun oturub 191 deyerin her sutuna gore tekrar-tekrar yazmaq mence mentiqli deyil, o ki qaldi performans baximindan her hansi bir problem yasamadim hemin kodu elave etdiyim zaman.
Bütün string typler üçün 191 seçmək üstün verən metod deyil çünki, bəzən elə column olar ki, sən orda sarəcə 5-10 symbole uzunluğda mətn saxlayarsan.
Birdə laravel nə qədər istifadəyə rahat və əlverişli olsada performans baxımından çox zəif olduğu rəsmi statistika qaynaqlarında təsdiqlənib.
Zatən performans baxımından zəif olan bir framework olduğunu Taylor özüdə bilir.

Mən qabağ app servis provayderdə View composer istifadə edirdim, hansı ki blade templateyə include edilmiş bladelərə data ötürmək üçün, istifadə olunması laravelin docsunda yazılsa belə.
Sonradan performansa nə qədər təsir etdiyini gördüm və bir çox tanıdığım şəxslərdə eyni fikirdədir mənlə
O docsda çox şey yazılır amma tətbiq edib etməməy seçim olaraq sənin əlindədir.
Mən sadəcə təklif etdim istəsəniz bu formada işlətməydə davam edə bilərsiniz
 
vscode terminalinda run recent command emrini ise saldigim zaman, poweshell & cmd uzerinde vermis oldugum kohne axtarislar gelir, men isteyirem ki hemin axtarislari sifirlayim, bunu vscode proqram uzerinden, Terminal: clear emrini ise saldigimda + windowsa restart verdiyimde teessuf ki yene hemin axtarislar oldugu kimi qalir, etrafli videodan baxa bilersiniz.
 
vscode terminalinda run recent command emrini ise saldigim zaman, poweshell & cmd uzerinde vermis oldugum kohne axtarislar gelir, men isteyirem ki hemin axtarislari sifirlayim, bunu vscode proqram uzerinden, Terminal: clear emrini ise saldigimda + windowsa restart verdiyimde teessuf ki yene hemin axtarislar oldugu kimi qalir, etrafli videodan baxa bilersiniz.
%userprofile%\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt faylini sifirlayaraq problemi hell etdim.
 
"php artisan migrate" və "php artisan migrate:refresh" komandaları, Laravel'da verilənlər bazasındakı cədvəllərin yaradılmasına və ya yenilənməsinə kömək edir. Bu komandaların istifadəsində zaman-zaman problemlər yaranır. Bu problemlərin bir neçə səbəbi ola bilər, məsələn:

  • Verilənlər bazasına qoşulmaq mümkün olmadığından komandalar xətalı işləyir.
  • İstifadə edilən Laravel versiyası ilə verilənlər bazasının uyğun gəlməməsi.
  • Cədvəllərin düzgün yaradılmaması və s.
Bu problemləri həll etmək üçün aşağıdakı addımları nəzərdə tutmaq məqsədəuyğundur:

  1. "php artisan migrate" və ya "php artisan migrate:refresh" komandasından öncə verilənlər bazasına qoşulmaq mümkün olduğunu yoxlayın. Bunun üçün, bir MySQL müştərisi ilə verilənlər bazasına qoşulun və əmin olun ki, qoşulmaq mümkündür. Əgər qoşulmaq mümkün deyilsə, cədvəllərin yaradılması mümkün olmayacaq.
  2. Laravel versiyası ilə verilənlər bazası uyğun gəlmir. İstifadə etdiyiniz Laravel versiyasına uyğun gələn verilənlər bazasını yaratdığınızdan əmin olun. Əgər fərqli bir Laravel versiyası istifadə edirsinizsə, uyğun olan verilənlər bazasını yaratmaq üçün məlumatlandırma sənədlərini yoxlayın.
  3. Cədvəllərin düzgün yaradılmaması, səhvlərə səbəb ola bilər. "php artisan migrate" komandasını işlədikdən sonra, yaradılan cədvəlləri yoxlayın və düzgün yaradıldığını təsdiq edin. Əks halda, mövcud cədvəlləri silib yenidən yaratmağa çalışın.
  4. Laravel loglarını yoxlayın və xəta mesajlarına diqqət yetirin. Xəta mesajları, səhvə səbəb olan konfiqurasiya xətalarını və ya digər problemləri açıqlığa çıxara bilər.
  5. Komandaların icrası zamanı qarşılaşdığınız səhvlərin mənbəyini təyin edin
 
Geri
Üst
Mövzu aç