这方面存在很多问题,但我正按照其他相关的S.O问题中描述的解决此问题的确切程序,但我得到了相同的错误。
商店
public function products()
{
return $this->hasMany('App\Product');
//->withTimestamps();
}
产品
public function shop()
{
return $this->belongsTo('App\Shop');
//->withTimestamps();
}
这就是我的架构的样子
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();
);
控制器
$products = new Product(array(
'name' => $request->('name');
));
$shop->products()->save($products);
将表单数据提交到products表后,出现错误Column not found: 1054 Unknown column 'id' in 'where clause'
。默认情况下,Laravel默认情况下会将id
作为我的主键,但它会product_id
。
在我的模型中,我指定了protected $primaryKey = 'product_id'
并且它无法解决我的问题。我的做法有何不同?
答案 0 :(得分:1)
在关系中,您必须在未被称为id时指定主键的名称,尝试更改模型,如下所示:
SHOP
public function products()
{
return $this->hasMany('App\Product', 'product_id');
//->withTimestamps();
}
<强>产品强>
public function shop()
{
return $this->belongsTo('App\Shop', 'product_id');
//->withTimestamps();
}
在文档中解释了它的工作原理: https://laravel.com/docs/5.5/eloquent-relationships#one-to-many
答案 1 :(得分:0)
如果您正在使用资源路线,那么您还需要指定路线钥匙名称:
float(10,6)
答案 2 :(得分:0)
我曾与当地人一起尝试过:
架构:
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();
});
模型关系与帖子完全相同。
控制器代码:
$shop = new Shop;
$shop->name = 'test';
$shop->save();
$products = new Product;
$products->name = 'test';
$shop->products()->save($products);
最后的结果?它没有错误地保存到产品表中。 我在当地使用Laravel 5.4。
当它声明Unknown column 'id' in 'where clause'
时,它是否说明了产品表?你能显示完整的Sql错误日志吗?
我怀疑可能是其他关系导致错误。