Własne kolumny tabeli w Laravel

Własne kolumny tabeli w Laravel
0

Cześć

wdrażam się we framework Laravel 5.4, ustawiłem nową tabele "users" z własnymi kolumnami, np "users_id" (PK), "users_pswd".

Laravel wyrzuca komunikat:

QueryException in Connection.php line 647:
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'users.id' in 'where clause' (SQL: select * from users where users.id = 2 limit 1)

Nie mogę ustawić własnych tabel, nie chcę robić żadnych migracji, to Ja chce dostosować system do mojej bazy, a nie odwrotnie. Co z tym zrobić ?

DO
  • Rejestracja:około 9 lat
  • Ostatnio:około 6 lat
  • Lokalizacja:Warszawa
  • Postów:213
0

Trocha dziwną nazwę tej kolumny dałeś, ale skoro masz już tak napisaną bazę to co zrobisz...
Wygląda na to, że próbujesz wyciągnąć jakiegoś usera za pomocą ::find(), tak?
Wszystko masz w komunikacie błędu już opisane - nie może znaleźć kolumny id w tabeli users.
Jak chcesz nadpisywać domyślny sposób działania Eloquenta to musisz to zrobić po całości.
Z dokumentacji:

Primary Keys

Eloquent will also assume that each table has a primary key column named id. You may define a $primaryKey property to override this convention.

In addition, Eloquent assumes that the primary key is an incrementing integer value, which means that by default the primary key will be cast to an int automatically. If you wish to use a non-incrementing or a non-numeric primary key you must set the public $incrementing property on your model to false.

edytowany 4x, ostatnio: Doggye
0

Nie nie, to nie o to chodzi, tam komunikat w SQL jest:

SQL: select * from users where users.id = 2 limit 1

w predykacie WHERE powinno być users.user_id

Reasumując, w tabelach mam własne nazwane kolumny, tymczasem w przypadku tabeli Users, Laravel narzuca mi kolumnę id a Ja mam user_id

DO
Przeczytałeś chociaż to co zacytowałem? Jak chcesz zbudować model na podstawie własnej tabeli to przeczytaj. Jak chcesz wyciągnąć z bazy po prostu informacje to poczytaj o DB::select, tez powinno pomóc.
0
Zakręcony Szczur napisał(a):

Nie nie, to nie o to chodzi, tam komunikat w SQL jest:

SQL: select * from users where users.id = 2 limit 1

w predykacie WHERE powinno być users.user_id

Reasumując, w tabelach mam własne nazwane kolumny, tymczasem w przypadku tabeli Users, Laravel narzuca mi kolumnę id a Ja mam user_id

Dalej się chyba nie rozumiemy inny przykład :

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'updated_at' in 'field list' (SQL: insert into users (user_login, user_pswd, updated_at, created_at) values (tester@gmail.com, $2y$10$o9i.69Bg5ZOTJj8mdjUe9u5SEQB853s0gi15iL2tJig1BahLhKk72, 2017-03-16 09:22:06, 2017-03-16 09:22:06))

Nie mam takich kolumn jak **updated_at **czy created_at

DO
  • Rejestracja:około 9 lat
  • Ostatnio:około 6 lat
  • Lokalizacja:Warszawa
  • Postów:213
1

Dałeś jeden problem to napisałem go jak rozwiązać. Teraz piszesz o kolejnym twierdząc, że dalej się nie rozumiemy.

Napisałem:

Jak chcesz nadpisywać domyślny sposób działania Eloquenta to musisz to zrobić po całości.

czyli znowu mamy odwołanie do dokumentacji:

Timestamps

By default, Eloquent expects created_at and updated_at columns to exist on your tables. If you do not wish to have these columns automatically managed by Eloquent, set the $timestamps property on your model to false:

Nie wiem jak wygląda Twoja baza, nie wiem co konkretnie próbujesz zrobić w kodzie. Podałeś tylko komunikat błędu i nazwę jednej z kolumn w tabeli. Teraz piszesz o innym błędzie. Poczytaj dokumentację, tam masz wszystko opisane.

Więcej masz tutaj.

edytowany 4x, ostatnio: Doggye
SU
  • Rejestracja:ponad 10 lat
  • Ostatnio:4 miesiące
  • Postów:247
0

Podaj najlepiej jak masz złożone zapytanie do bazy.

DE
  • Rejestracja:ponad 9 lat
  • Ostatnio:10 miesięcy
  • Postów:1788
0

Pewnie używasz modelu User, a Eloquent (ORM w Laravelu) domyślnie za kolumnę id przyjmuje id. To samo z updated_at. Jak Twoja się nazywa user_id to musisz dodać do modelu:

Kopiuj
// ...
class User extends Authenticatable
{
    use Notifiable, SoftDeletes;

    protected $primaryKey = 'user_id';

    public $timestamps = false;
    
    //... 
}

RTFM zanim zaczniesz działać z Laravelem :) Zajmie Ci to kilkadziesiąt minut całość.

https://laravel.com/docs/5.2/eloquent#eloquent-model-conventions

https://laracasts.com/discuss/channels/laravel/create-migrations-and-models-from-existing-database
http://packalyst.com/packages/package/ignasbernotas/laravel-model-generator

edytowany 4x, ostatnio: Desu
0

Wciąż się nie rozumiemy, ale nie ma problemu już sobie poradziłem, UWAGA ODPOWIDŹ:

w klasie User class User extends Authenticatable {} wystarczy zdefiniować swoją własną nazwę kolumny, w tym przypadku user_id, czyli:

protected $primaryKey = 'user_id';

Takiej odpowiedzi oczekiwałem...

DO
Niemożliwe... :O
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)