【问题标题】:laravel eloquent pivot table query "ambiguous column name"laravel 雄辩的数据透视表查询“不明确的列名”
【发布时间】:2015-09-21 05:38:31
【问题描述】:

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

Connection.php 第 631 行中的 QueryException:SQLSTATE[HY000]:常规 错误:1 列名不明确:main.cart.products_id(SQL:选择 "cart".*, "cart"."user_id" as "pivot_user_id", "cart"."products_id" as 来自“cart”的“pivot_products_id”内部连接“cart”到“cart”。“id”= "cart"."products_id" 其中 "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');
    });

【问题讨论】:

    标签: php sql laravel eloquent pivot-table


    【解决方案1】:

    在您的 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:请注意,最好将模型类名称保持为单数(产品不是产品),方法名称应以小写字母开头(carts 不是 Carts)

    【讨论】:

    • 就是这样!非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-17
    • 1970-01-01
    • 2020-03-19
    • 2020-06-20
    • 2014-05-10
    • 1970-01-01
    • 2018-01-26
    相关资源
    最近更新 更多