Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z dodaniem nowych rekordów do bazy danych [Laravel]
Forum PHP.pl > Forum > Przedszkole
klopot21
Cześć,
Dziś chciałem dodać nową tabelę do bazy danych a następnie ją uzupełnić niestety od 5 godzin nie jestem w stanie tego zrobić może ktoś mi wyjaśni o co chodzi?

Migracja
  1. <?php
  2.  
  3. use Illuminate\Database\Migrations\Migration;
  4. use Illuminate\Database\Schema\Blueprint;
  5. use Illuminate\Support\Facades\Schema;
  6.  
  7. class site extends Migration
  8. {
  9. /**
  10.   * Run the migrations.
  11.   *
  12.   * @return void
  13.   */
  14. public function up()
  15. {
  16. Schema::create('site', function (Blueprint $table) {
  17. $table->id();
  18. $table->string('link');
  19.  
  20.  
  21. });
  22. }
  23.  
  24. /**
  25.   * Reverse the migrations.
  26.   *
  27.   * @return void
  28.   */
  29. public function down()
  30. {
  31. Schema::dropIfExists('site');
  32. }
  33. }



  1. <?php
  2.  
  3. namespace App;
  4.  
  5. use Illuminate\Database\Eloquent\Model;
  6.  
  7. class site extends Model
  8. {
  9. public $timestamps = false;
  10. }



  1. use App\site;
  2.  
  3.  
  4.  
  5. $rules = [
  6. 'site_link' => 'required',
  7. 'site_description' => 'required',
  8. 'rating' => 'required',
  9. ];
  10.  
  11. $customMessages = [
  12. 'site_link.required' => 'Wymagany link do strony!',
  13. 'site_description.required' => 'Wymagany opis strony!',
  14. 'rating.required' => 'Wymagana ocena strony!'
  15. ];
  16.  
  17. $this->validate($request, $rules, $customMessages);
  18.  
  19. $site_link = $request -> input('site_link');
  20. $site_description = $request -> input('site_description');
  21. $rating = $request -> input('rating');
  22.  
  23. $site = new site;
  24. $site->link = "1";
  25. $site->save();
  26.  
  27.  
  28.  
  29.  
  30.  
  31. if(isset($last_id_db)) {
  32.  
  33. return redirect()->back()->with('msg_success', 'Dodałeś Nową stronę!<br>');
  34. }
  35. else
  36. {
  37. return redirect()->back()->with('msg_errors', 'Błąd dodawania nowej strony. Prosimy o kontakt z administratorem.');
  38. }
  39.  
  40.  
  41. }
  42.  
  43.  
  44.  


Jeśli uzyję bazy danych która istniała wcześniejszej nie ma problemu. po modyfikacji kodu można bez problemu dodać nowe rekordy problem niestety występuje tylko w przypadku próby dodania danych do nowej tabeli.

Sprawdziłem przez phpmyadmin czy tabela "site" znajduje się w bazie danych i wszystko jest okey. Jeśli dodam rekordy ręcznie w bazie i chce je pobrać to nie ma problemu problem pojawia się przy próbie dodania...

SQLSTATE[42S02]: Base table or view not found: 1146 Table 'videoweb.sites' doesn't exist (SQL: insert into `sites` (`link`) values (1))

W bazie danych videoweb istnieje tabela site natomiast nie wiem skąd bierze się "s" na końcu. w błędzie który wyświetla ralavela.
Lord
Witam,

Jeżeli model nazywa się Site to tabela domyślnie w Laravelu ma liczbę mnogą. Możesz to zmienić:

https://laravel.com/docs/8.x/eloquent#table-names

Zalecam jednak pozostawienie nazwy domyślnej. Tak samo jak pisanie nazw Modeli z wielkiej litery.
viking
I czy w ogóle uruchamiasz migracje?
klopot21
Tak, robiłem migrację. Usuwałem całą bazę danych dodawałem od nowa wszystko ręcznie, używałem polecenia do migracji. Problem jest tylko w przypadku próby dodania rekordu do tabeli jeśli chce pobrać dane z tej samej tabeli już nie ma takiego problemu. Myślałem że to wina kodu który ma cofnąć się do poprzedniej strony niestety nie jest to powodem. Może ktoś ma jakiś pomysł?
LowiczakPL
nazwy klas z wielkiej litery

w modelu brakuje

  1. protected $fillable = [
  2. 'link'
  3. ];


Czy masz do tego kontroler z CRUDem oraz ruting?
klopot21
Cytat(LowiczakPL @ 27.05.2021, 11:26:25 ) *
nazwy klas z wielkiej litery

w modelu brakuje

  1. protected $fillable = [
  2. 'link'
  3. ];


Czy masz do tego kontroler z CRUDem oraz ruting?


Dzięki za podpowiedź dodanie
  1. protected $fillable = [
  2. 'link'
  3. ];

Pomogło aczkolwiek żadna inna tabela tego nie potrzebowała do działania
Pyton_000
$fillable / $guarded jest wymagane jedynie gdy podajesz tablicę z nazwami pól i ich wartościami. Jeśli przypisujesz wartości do parametrów nic nie trzeba zmieniać (dokumentacja to wyjaśnia).
Tak jak jeden z poprzedników powiedział nazwa tabeli liczba mnoga, model liczba pojedyńcza https://laravel.com/docs/8.x/eloquent#eloqu...del-conventions
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.