• 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

Object Storage Arubacloud
0 głosów
415 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ź 185 wizyt
pytanie zadane 25 listopada 2019 w PHP przez Q_Nick Mądrala (5,010 p.)
0 głosów
0 odpowiedzi 474 wizyt
pytanie zadane 26 marca 2019 w PHP przez Grzegorz Mikina Dyskutant (8,060 p.)
0 głosów
1 odpowiedź 284 wizyt

92,568 zapytań

141,422 odpowiedzi

319,637 komentarzy

61,956 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...