laravel 雄辩的数据透视表查询“不明确的列名”
Posted
技术标签:
【中文标题】laravel 雄辩的数据透视表查询“不明确的列名”【英文标题】:laravel eloquent pivot table query "ambiguous column name" 【发布时间】: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');
);
【问题讨论】:
【参考方案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)
【讨论】:
就是这样!非常感谢!以上是关于laravel 雄辩的数据透视表查询“不明确的列名”的主要内容,如果未能解决你的问题,请参考以下文章