• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Laravel relacja jeden do wielu - odwołanie do nieistniejącego pola

VPS Starter Arubacloud
0 głosów
426 wizyt
pytanie zadane 23 lipca 2018 w PHP przez kevin Mądrala (5,010 p.)

Witam!

O czym ja zapominam robiąc migracje w Lavarelu że raz relacje działają mi tak a raz tak ? Przedstawiając to co chcę uzyskać to chcę przypisać użytkownikowi jego zamówienia a zamówieniu produkty jakie zamówił. Więc mam tabelę User tabelę Order i tabelę OrderProduct. Tabela Usera z relacją jeden do wielu z tabelą Order, tabela Order z relacją jeden do wielu z tabelą OrderProduct. Zaczynając od relacji Order i OrderProduct wyskakuje mi błąd:

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'order_products_tables.order_table_id' in 'where clause' (SQL: select * from `order_products_tables` where `order_products_tables`.`order_table_id` = 1 and `order_products_tables`.`order_table_id` is not null)

I ten błąd mówi jasno i wyraźnie że nie może znaleźć kolumny order_table_id w tabeli order_products_tables i się nie dziwię co może teraz głupio zabrzmieć bo takiego pola nie ma ale jest pole order_id i w migracjach jest opisane z którym polem jest relacja i nie mogę zrozumieć dlaczego Laravel stara się odwoływać do order_products_tables.

Migracje Order:

        Schema::create('order_tables', function (Blueprint $table) {
            $table->increments('id');

            $table->integer('user_id')->unsigned()->nullable();

            $table->foreign('user_id')
                ->references('id')
                ->on('users');

            $table->timestamps();
        });

Migracje OrderProduct:

        Schema::create('order_products_tables', function (Blueprint $table) {
            $table->increments('id');

            $table->integer('order_id')->unsigned();

            $table->integer('count')->unsigned();
            $table->integer('price')->unsigned();

            $table->foreign('order_id')
                ->references('id')
                ->on('order_tables');

            $table->timestamps();
        });

Jak to wynika z migracji tabela order_products_tables przechowuje ID rekordu z tabeli order_tables i na podstawie tego ID zachodzi relacja.

Model tabeli Order:

class OrderTable extends Model
{
    protected $table = 'order_tables';

    public function user()
    {
        return $this->belongsTo(User::class, 'id');
    }

    public function products()
    {
        return $this->hasMany('App\OrderProductTable');
    }
}

Model tabeli OrderProduct:

class OrderProductTable extends Model
{
    protected $table = 'order_products_tables';

    public function order()
    {
        return $this->belongsTo(OrderTable::class, 'id');
    }
}

Nie rozumiem dlaczego idzie odwołanie do order_table_id. Mam zrobione inne relacje np. User i Order na tej samej zasadzie i działa to bez problemu nagle tutaj pojawił mi się taki przypadek. Gdzie mam szukać rozwiązania i dlaczego tak to działa ?

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
1 odpowiedź 255 wizyt
pytanie zadane 25 listopada 2019 w PHP przez Q_Nick Mądrala (5,010 p.)
0 głosów
0 odpowiedzi 625 wizyt
pytanie zadane 26 marca 2019 w PHP przez Grzegorz Mikina Dyskutant (8,060 p.)
0 głosów
1 odpowiedź 309 wizyt

92,980 zapytań

141,943 odpowiedzi

321,189 komentarzy

62,309 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...