未找到列:1054未知列' id'在' where子句' - Laravel

时间:2017-10-20 17:04:53

标签: php mysql laravel

这方面存在很多问题,但我正按照其他相关的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'并且它无法解决我的问题。我的做法有何不同?

3 个答案:

答案 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错误日志吗?

我怀疑可能是其他关系导致错误。