Получить все поля из сводной таблицы

Есть ли способ получить все поля в таблице вращаться вместо того, чтобы указывать одно за другим?

Например (начиная с руководства здесь):

магазины:

  • я бы
  • название

продукты:

  • я бы
  • название

product_shop:

  • идантификационный номер продукта
  • shop_id
  • поле_1
  • поле_2
  • field_3
  • ecc ...

Я не хочу указывать каждое отдельное поле:

public function products() {
   return $this->belongsToMany('App\Product')
        ->withPivot('field_1', 'field_2', 'field_3', 'ecc..' );
}

но я бы вернул все доступные поля в таблице; что-то вроде ->withPivot('*');

Есть способ?

Спасибо.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
252
2

Ответы 2

Это невозможно сделать, потому что это было бы довольно сложно.

Чтобы предотвратить коллизии, Laravel должен добавить псевдонимы для сводных столбцов:

`product_shop`.`field_1` as `pivot_field_1`, ...

Итак, Laravel понадобится список всех столбцов в сводной таблице. Единственный способ получить этот список - это отдельный запрос к information_schema.columns.

Вам помогает ответ?

Jonas Staudenmeir 08.06.2018 02:28

Вы можете добиться этого, сначала получив все столбцы (поля) из таблицы product_shop и передав их в виде массива в withPivot. Смотрите код ниже:

public function products() {
    $table_name = 'product_shop';

    // or you could get table name dynamically if you have a ProductShop model
    // $table_name = (new ProductShop)->getTable()

    $table_fields = Schema::getColumnListing($table_name);

    return $this->belongsToMany('App\Product')
    ->withPivot($table_fields);
}

Не забудьте импортировать схему:

use Illuminate\Support\Facades\Schema; 

Надеюсь, у вас это сработает. Вы можете удалить некоторые поля из массива по значению. Эта ссылка объясняет, как удалить некоторые поля.

Другие вопросы по теме