Laravel выбрать из 2 таблиц - PullRequest
       4

Laravel выбрать из 2 таблиц

0 голосов
/ 03 октября 2018

Я много искал и не могу найти решение.У меня есть 3 таблицы, одна таблица shopping_carts, один продукт и, наконец, таблица товаров.Я создал интернет-магазин и хочу отображать количество каждого продукта после того, как пользователь нажмет кнопку «Добавить в корзину».Мой код ниже, но он возвращает только тот продукт, который существует в таблице товаров, и это логика.Мне нужно количество этого товара в таблице товаров, но мне также нужны остальные товары из таблицы товаров.

 return $query = Product::select('title','price','imageUrl','quantity','products.id')
           ->join('items','items.product_id','=','products.id')
           ->where('shopping_cart_id', '=' ,$id)->get();

shopping_carts enter image description here

продукты enter image description here

элементы enter image description here

Ответы [ 3 ]

0 голосов
/ 03 октября 2018

Попробуйте это

$products = DB::table('items')
    ->join('products', 'items.product_id', '=', 'products.id')
    ->where('shopping_cart_id', '=' , $id)
    ->get();

Или используя отношения

class ShoppingCart extends Model
{
    public function items()
    {
        return $this->hasMany('App\Item');
    }
}

class Item extends Model
{
    public function product()
    {
         return $this->belongsTo('App\Product');
    }
}

, затем используйте

$shopping_cart = ShoppingCart::with(['items', 'items.product'])->find($id);

Обновленный ответ со всем продуктом

Product::select('products.id', 'products.title', 'products.price', 'products.imageUrl', 
                 DB:raw('(CASE WHEN items.qunatity IS NULL THEN 0 ELSE items.qunatity END) as quantity')
       ->leftJoin('items', function($join) use($id){
            $join->on('products.id', '=', 'items.product_id')
                ->on('items.shopping_cart_id', '=', $id);
        })->get();
0 голосов
/ 03 октября 2018

я нашел ответ с некоторыми изменениями в коде ноуфальцепа

return Product::select('products.id', 'products.title', 'products.price', 'products.imageUrl',
           DB::raw('CASE WHEN items.quantity IS NULL THEN 0 ELSE items.quantity END as quantity'))
       ->leftJoin('items', function($join) use($id){
           $join->on('products.id', '=', 'items.product_id')
               ->where('items.shopping_cart_id', '=', $id);
       })->get();
0 голосов
/ 03 октября 2018

Вы можете достичь этого двумя способами: -

Первый из них - использование отношений здесь https://laravel.com/docs/5.7/eloquent-relationships

Второй - изменение существующего запроса: -

return $query = Product::select('title','price','imageUrl','quantity','products.id')
       ->leftJoin('items','items.product_id','=','products.id')
       ->where('shopping_cart_id', '=' ,$id)->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...