有没有办法获取 pivot 表中的所有字段,而不是逐个指定?
例如(从指南here开始):
商店:
产品:
product_shop :
我不想指定每个字段:
public function products() {
return $this->belongsToMany('App\Product')
->withPivot('field_1', 'field_2', 'field_3', 'ecc..' );
}
但我会返回表格中的所有可用字段;像->withPivot('*');
有办法吗?
谢谢。
答案 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。