【问题标题】:Integrity constraint violation joining tables MySql完整性约束违反连接表MySql
【发布时间】:2023-03-28 01:15:02
【问题描述】:

我有三个表推荐,产品和 products_photos。在推荐表和 products_photos 表中,它们都有 product_id 列。我想加入他们(三个),但我收到此错误 Integrity constraint violation: 1052 Column 'product_id' in field list ,我该如何加入他们?

Route::get('/info', function(){
$products = DB::table('recommends')
->leftJoin('products','recommends.product_id','products.id')
->join('products_photos','products_photos.product_id','products.id' 
)
->select('product_id','name','price', DB::raw('count(*) as total'))
->groupBy('product_id','name','price')
->get();
//dd($products);

});

【问题讨论】:

  • 您必须在 select 或 group by cluse 中指定 table.fieldname
  • ->select('recommends.product_id','products.name','products.price') ->groupBy('recommends.product_id','products.name','products.price' ')

标签: php mysql laravel laravel-5


【解决方案1】:

您从未指定要在加入通话中使用的等式/不等式运算符。尝试这样做,并使用适当的别名限定您选择的所有列:

Route::get('/info', function() {
    $products = DB::table('recommends AS r')
        ->leftJoin('products AS p', 'r.product_id', '=', 'p.id')
        ->join('products_photos AS pp', 'pp.product_id', '=', 'p.id')
        ->select('p.id', 'p.name', 'p.price', DB::raw('COUNT(*) AS total'))
        ->groupBy('p.id', 'p.name', 'p.price')
        ->get();
});

我假设products 具有idnameprice 列。

【讨论】:

  • 这给出了一个错误recommends r' doesn't exist@Tim Biegeleisen
  • 对不起...显然 Laravel 需要明确的 AS 别名表时。再试一次。
【解决方案2】:

问题出在您的 Select 语句中您正在选择 product_id,在选择此类列时,您必须提供要从中获取该列的表名,例如:

...
->select('recommends.product_id','name','price', DB::raw('count(*) as total'))
...

【讨论】:

    猜你喜欢
    • 2015-06-07
    • 2018-03-03
    • 2016-04-24
    • 2020-01-14
    • 2013-03-31
    • 2021-12-13
    • 2017-10-01
    • 2019-04-12
    相关资源
    最近更新 更多