Laravel5: Красноречивый и ПРИСОЕДИНЯЙСЯ

avatar
Mingeun Kim
8 апреля 2018 в 02:22
40
2
0
  1. Таблица элементов

    | id    | item_id | item_title |
    |-------|---------|------------|
    | 1     | 1002    | A          |
    | 2     | 1003    | B          |
    | 3     | 1004    | C          |
    
  2. Таблица продаж

    | id | item_id   |  
    |----|-----------|
    | 1  | 1002 1003 |
    | 2  | 1003 1004 |
    | 3  | 1004 1002 |
    

Я хочу получить результат: Sells Table 1. название элемента A B

Я хочу объединить таблицу продаж с таблицей товаров, а затем сопоставить item_id таблицы продаж с item_title таблицы товаров.

Источник

Ответы (2)

avatar
Brian Lee
8 апреля 2018 в 03:55
1

Определения таблицы выглядят неправильно, у вас должна быть сводная таблица, связывающая items с sells, поэтому таблица sell_item:

item_id | sell_id
-----------------
1       | 1
1       | 3
2       | 1
2       | 2
3       | 2
3       | 3

Затем, используя красноречие, вы создадите модели для представления ваших таблиц и определите отношения, используя BelongsToMany:

class Item extends Model {
    public function sells() {
         return $this->belongsToMany(Sell::class);
    }
}

class Sell extends Model {
    public function items() {
         return $this->belongsToMany(Item::class);
    }
}

Каждый экземпляр любой модели будет иметь доступ к связанным с ним моделям через $item->sells и $sell->items.

Конструктор запросов может выполнить соединение, если он не идет по маршруту Eloquent:

DB::table('sells')->join('items', 'sells.item_id', '=', 'items.item_id')
                  ->select('sells.*', 'items.title')
                  ->get();
avatar
Awadhesh Kumar
22 мая 2018 в 14:16
0

Определения таблицы выглядят некорректно. Если вы уже исправили, то ваша модель должна быть похожа на

class Item extends Model {
    public function sells() {
         return $this->belongsToMany(Sell::class);
    }
}

class Sell extends Model {
    public function items() {
         return $this->belongsToMany(Item::class);
    }
}

Каждый экземпляр любой модели будет иметь доступ к связанным с ним моделям через $item->sells и $sell->items.

Конструктор запросов может выполнить соединение, если он не идет по маршруту Eloquent:

DB::table('sells')->join('items', 'sells.item_id', '=', 'items.item_id')
                  ->select('sells.*', 'items.title')
                  ->get();

Или, если название вашей модели Sell, то

$response=Sell::with('items')->get();