Nie znaleziono kolumny: 1054 nieznana kolumna „id” w „klauzuli gdzie” - Laravel


Wystąpiło wiele problemów z tym związanych, ale postępuję zgodnie z dokładną procedurą rozwiązania tego problemu opisaną w innych powiązanych pytaniach dotyczących S.O, ale otrzymuję ten sam błąd.

Wynik

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


Produkt

public function shop()
{
return $this->belongsTo('App\Shop');
//->withTimestamps();
}

Tak wygląda mój schemat
Schema::create('products', function (Blueprint $table) {
$table->increments('product_id');
$table->integer('shop_id')->unsigned()->nullable();
$table->foreign('shop_id')->references('id')->on('shops'); $table->timestamps(););


Kontroler

$products = new Product(array( 'name' => $request->('name');
)); $shop->products()->save($products);

Po przesłaniu danych mojego formularza do tabeli produktów otrzymuję błąd
Column not found: 1054 Unknown column 'id' in 'where clause'
. Laravel domyślnie wydaje się akceptować
id
domyślnie jako mój klucz podstawowy, ale jest to
product_id
.
W moim modelu określiłem
protected $ primaryKey = 'product_id'
i to nie rozwiązałoby mojego problemu. Co ja robię inaczej?
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

W relacji, w której musisz określić nazwę klucza podstawowego, gdy nie jest ona nazywana id, spróbuj zmienić model w następujący sposób:

SHOP

public function products()
{
return $this->hasMany('App\Product', 'product_id');
//->withTimestamps();
}


PRODUCT

public function shop()
{
return $this->belongsTo('App\Shop', 'product_id');
//->withTimestamps();
}

Dokumentacja wyjaśnia, jak to działa:

https://laravel.com/docs/5.5/e ... -many
https://laravel.com/docs/5.5/e ... -many
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Próbowałem z moim lokalnym, wykonując następujące czynności:
Schemat:
Schema::create('shops', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->timestamps();
});Schema::create('products', function (Blueprint $table) {
$table->increments('product_id');
$table->string('name');
$table->integer('shop_id')->unsigned()->nullable();
$table->foreign('shop_id')->references('id')->on('shops');
$table->timestamps();
});

Model relacji jest dokładnie taki sam jak Twój post.
Kod kontrolera:
$shop = new Shop;
$shop->name = 'test';
$shop->save();$products = new Product;
$products->name = 'test';$shop->products()->save($products);

A co z efektem końcowym? Jest zapisywany w tabeli produktów bez błędów.
Używam Laravel 5.4 w moim lokalnym biurze.
Kiedy pojawia się
Unknown column 'id' in 'where clause'
, ale czy jest to tabela produktów? Czy możesz wyświetlić pełny dziennik błędów Sql?
Podejrzewam, że może to być inny związek, który spowodował błąd.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Jeśli używasz tras zasobów, musisz również określić nazwę klucza trasy:
public function getRouteKeyName()
{
return 'product_id';
}

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się