Нарушение ограничения целостности присоединяющихся таблиц MySql - PullRequest
0 голосов
/ 10 июля 2019

У меня есть три таблицы рекомендаций, продуктов и продуктов_фото. В таблицах рекомендует и таблице 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);

});

Ответы [ 2 ]

2 голосов
/ 10 июля 2019

Вы никогда не указывали оператор равенства / неравенства, который будет использоваться при вызове соединения. Попробуйте сделать это, а также укажите все выбранные столбцы с соответствующим псевдонимом:

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 имеет столбцы id, name и price.

0 голосов
/ 10 июля 2019

Проблема в вашем утверждении Выбрать. Вы выбираете product_id, который доступен как в рекомендациях, так и в продуктах. При выборе такого столбца необходимо указать имя таблицы, из которой вы собираетесь извлечь этот столбец. Например:

...
->select('recommends.product_id','name','price', DB::raw('count(*) as total'))
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...