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)
我正在尝试在 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)