laravel eloquent 数据透视 table 查询 "ambiguous column name"

laravel eloquent pivot table query "ambiguous column name"

我正在尝试在 table 的两个用户和产品之间创建一个支点 table。但是,当我 运行 $user->Cart()->Get(); 时,出现以下错误:

QueryException in Connection.php line 631: SQLSTATE[HY000]: General error: 1 ambiguous column name: main.cart.products_id (SQL: select "cart".*, "cart"."user_id" as "pivot_user_id", "cart"."products_id" as "pivot_products_id" from "cart" inner join "cart" on "cart"."id" = "cart"."products_id" where "cart"."user_id" = 2)

这是用户模型:

class User extends Model implements AuthenticatableContract, CanResetPasswordContract
{
    ...

    public function Cart()
    {
        return $this->belongsToMany('App\Cart', 'cart', 'user_id', 'products_id');
    }
}

产品型号:

class Products extends Model
{
    ...
    public function Cart()
    {
        return $this->belongsToMany('App\Cart', 'cart', 'products_id', 'user_id');
    }
}

购物车型号:

class Cart extends Model
{
    //
    protected $table = 'cart';

    public function Products()
    {
        return $this->hasMany('App\Products', 'products', 'user_id', 'products_id');
    }


    public function User()
    {
        return $this->hasMany('App\Products', 'users', 'user_id', 'products_id');
    }
}

购物车架构:

        Schema::create('cart', function (Blueprint $table) {

        $table->integer('products_id')->unsigned();
        $table->foreign('products_id')->references('id')->on('products')
            ->onUpdate('cascade')->onDelete('cascade');
        $table->integer('user_id')->unsigned();
        $table->foreign('user_id')->references('id')->on('users')
            ->onUpdate('cascade')->onDelete('cascade');
    });

在您的 User 模型中,cart() 方法应该将 App\Product 作为第一个参数:

class User extends Model implements AuthenticatableContract, CanResetPasswordContract
{
    public function carts()
    {
        // User can have many "products" in cart
        return $this->belongsToMany('App\Product', 'cart', 'user_id', 'products_id'); 
    }
}

产品也一样:

class Product extends Model
{
    public function carts()
    {
        return $this->belongsToMany('App\User', 'cart', 'products_id', 'user_id');
    }
}

那么您的购物车型号:

class Cart extends Model
{
    protected $table = 'cart';

    public function product()
    {
        return $this->hasMany('App\Product', 'id', 'product_id');
    }


    public function user()
    {
        return $this->hasMany('App\User', 'id', 'user_id');
    }
}

PS:请注意,最好将模型 class 名称保留为单数(产品而非产品)并且方法名称应以小写字母开头(carts 而非 Carts)