L5.6 - Отношение по сводной таблице - PullRequest
0 голосов
/ 22 мая 2018

У меня есть отношение к таблице pivot ;как я могу расширить его?

Например:

магазины :

  • id
  • имя

продукты :

  • id
  • имя

product_shop :

  • product_id
  • shop_id
  • field_1
  • field_2
  • field_3
  • table_A_id

table_A :

  • id
  • name

Отношение «многие ко многим» в модели Shops:

class Shops extends Model {
    public function products()
    {
        return $this->belongsToMany('Products', 'product_shop', 'product_id', 'shop_id')->withPivot(
            'field_1',
            'field_3',
            'field_3',
            'table_A_id'
            )
            ->as('product_shop')
            ->withTimestamps();
    }

}

и запрос для извлечения всех данных:

class GetData extends Model {
     public static function getAll() {
         $query = Shops::with(
            'products'
            )->get();
     }
}

Это возвращает product_shop.table_A_id, но я хотел бы расширить внешний ключи получить table_A.name;есть ли способ?

Спасибо.

1 Ответ

0 голосов
/ 22 мая 2018

Вы можете использовать сводную модель:

class ProductShopPivot extends \Illuminate\Database\Eloquent\Relations\Pivot
{
    public function tableA()
    {
        return $this->belongsTo(TableA::class);
    }
}

class Shops extends Model
{
    public function products()
    {
        return $this->belongsToMany('Products', 'product_shop', 'product_id', 'shop_id')
            ->withPivot(
                'field_1',
                'field_3',
                'field_3',
                'table_A_id'
            )
            ->as('product_shop')
            ->withTimestamps()
            ->using(ProductShopPivot::class);
    }
}

Затем получите доступ к ней следующим образом:

$shop->product_shop->tableA->name

К сожалению, нет способа загружать отношение tableA.

...