首页 > 解决方案 > 如何从 Laravel 中的 select() 方法中替换值

问题描述

我有一个名为“GearItem”的模型,其中包含一排齿轮项。其中一列称为“manufacturer_id”。- 这些是“制造商”模型的 ID,其中包含有关每个齿轮项目制造商的数据。

我在我的 GearItem 控制器中创建了一个名为“getItemsNames”的函数,我希望它返回一个如下所示的 JSON:

[
{id: 1,
name: "foo",
manufacturer: "bar"}, 
{id: 2,
name: "baz",
manufacturer: "qux"},
{...}, 
]

如何更改查询 GearItem::select('id', 'name', 'manufacturer_id')->get();

在我定义后替换 'manufacturer_id'by :$manufacturer[0]->name

$manufacturer = Manufacturer::select('name')
                            ->where('id', GearItem::value('manufacturer_id'))
                            ->get();

我不知道如何在不破坏 JSON 结构的情况下插入此逻辑。有没有一种优雅的方法可以做到这一点,还是我必须遍历 JSON 并用'manufacturer_id'名称替换每个?

标签: phpmysqllaraveleloquent

解决方案


好的,所以 RiggsFolly 的提示帮助我找到了最优雅的解决方案,这将是 ->join()选择后的方法。这解决了问题:

GearItem::select('gear_items.id', 'gear_items.name', 'manufacturers.name as manufacturer')
        ->join('manufacturers', 'gear_items.manufacturer_id', '=', 'manufacturers.id')
        ->get();

推荐阅读