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 ?