L5.6 - 从' pivot'获取所有字段表

时间:2018-05-17 12:52:05

标签: php eloquent pivot relationship laravel-5.6

有没有办法获取 pivot 表中的所有字段,而不是逐个指定?

例如(从指南here开始):

商店

  • ID
  • 名称

产品

  • ID
  • 名称

product_shop

  • PRODUCT_ID
  • shop_id
  • field_1
  • field_2
  • field_3
  • ECC ...

我不想指定每个字段:

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

但我会返回表格中的所有可用字段;像->withPivot('*');

这样的东西

有办法吗?

谢谢。

2 个答案:

答案 0 :(得分:0)

没有办法做到这一点,因为它会非常复杂。

为了防止冲突,Laravel必须为数据透视表列添加别名:

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

因此,Laravel需要一个透视表中所有列的列表。获取此列表的唯一方法是单独查询information_schema.columns

答案 1 :(得分:0)

您可以通过首先从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; 

我希望它对您有用。您可能需要按值从数组中删除某些字段。 This link explains how to remove some fields