php - 获取laravel关系时将键设置为差异键
问题描述
我想将我的集合数组键更改为语言代码。
这是我的代码
$products = Product::has('languages')->paginate(20);
return response()->json($products);
这是我的关系
public function languages($lang_id = null)
{
if ($lang_id)
return $this->hasMany(ProductLang::class)->where('lang_id', $lang_id)->first();
return $this->hasMany(ProductLang::class);
}
这就是我现在得到的。
Illuminate\Database\Eloquent\Collection {#613 ▼
#items: array:2 [▼
0 => App\Models\Product\ProductLang {#614 ▶}
1 => App\Models\Product\ProductLang {#615 ▶}
]
}
预期的:
Illuminate\Database\Eloquent\Collection {#613 ▼
#items: array:2 [▼
en => App\Models\Product\ProductLang {#614 ▶}
zh => App\Models\Product\ProductLang {#615 ▶}
]
}
谢谢你的帮助..
解决方案
有一个名为keyBy的集合方法。另外,我不会像您传递的那样在关系中使用条件参数$lang_id
。我宁愿创建两种关系方法。
所以,你可以这样做:
$products = Product::has('languages')
->paginate(20)
->getCollection()
->map(function ($product) {
return $product->languages->keyBy('lang_id');
});
return response()->json($products);
推荐阅读
- android - 如果片段在 ScrollView 内,不能动态添加片段?
- c++ - C++、GPIO、单独的数据和时钟线
- angular - Angular Material 2 动态主题颜色
- python - 如何将指标添加到模型 keras
- android - 我在哪里可以找到用于assetlinks.json 的 google play 控制台的密钥库 sha256?
- javascript - 如何使用纯 JavaScript 在数组中使输入值不区分大小写
- python - 如何制作正弦模式平稳时间序列?
- java - 如何在 Java 中使用 apache.commons.imaging 保留 TIFF 图像的透明度
- php - php - 检查条件中的命名空间
- ms-access - 筛选日期以搜索 PLC 项目