• 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

0 głosów
100 wizyt
pytanie zadane 23 lipca 2018 w PHP, Symfony, Zend przez kevin Gaduła (4,560 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
0 odpowiedzi 46 wizyt
0 głosów
1 odpowiedź 103 wizyt
0 głosów
1 odpowiedź 488 wizyt
pytanie zadane 11 marca 2016 w PHP, Symfony, Zend przez shimizu Obywatel (1,650 p.)
Porady nie od parady
Zadając pytanie postaraj się o odpowiedni tytuł, kategorię oraz tagi.Tagi

63,406 zapytań

109,671 odpowiedzi

229,148 komentarzy

44,695 pasjonatów

Przeglądających: 300
Pasjonatów: 16 Gości: 284

Motyw:

Akcja Pajacyk

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

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...