Php 从';枢轴';桌子

Php 从';枢轴';桌子,php,eloquent,pivot,relationship,laravel-5.6,Php,Eloquent,Pivot,Relationship,Laravel 5.6,是否有办法获取透视表中的所有字段,而不是逐个指定 例如(从指南开始): 商店: 身份证 名字 产品: 身份证 名字 产品商店: 产品标识 店号 字段_1 字段2 第3场 ecc 我不想指定每个字段: public function products() { return $this->belongsToMany('App\Product') ->withPivot('field_1', 'field_2', 'field_3', 'ecc..' );

是否有办法获取透视表中的所有字段,而不是逐个指定

例如(从指南开始):

商店

  • 身份证
  • 名字
产品

  • 身份证
  • 名字
产品商店

  • 产品标识
  • 店号
  • 字段_1
  • 字段2
  • 第3场
  • ecc
我不想指定每个字段:

public function products() {
   return $this->belongsToMany('App\Product')
        ->withPivot('field_1', 'field_2', 'field_3', 'ecc..' );
}
但是我会返回表中所有可用的字段;类似于
->withPivot('*')

有办法吗


谢谢。

没有办法这样做,因为这会非常复杂

为防止碰撞,Laravel必须为轴列添加别名:

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

因此,Laravel需要一个透视表中所有列的列表。获取此列表的唯一方法是单独查询
信息\u架构。columns

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

我希望它对你有用。您可能需要按值从数组中删除一些字段

答案对你有帮助吗?