【问题标题】:Move Laravel with() Json array to parent Json array将 Laravel with() Json 数组移动到父 Json 数组
【发布时间】:2022-01-08 09:43:04
【问题描述】:

我正在使用此代码获取数据。

$user = User::where('active', 1)->with(['spots:spot_name,spot_uid'])->get();

这很好用!它获取关系并输出数据。

但是数据看起来像这样。

user_uid: 5
spots: {spot_name: 'backend'}
description: "Test user works in helpdesk"
department: "9"

它显示了我需要的所有数据,但我希望 spot_name 不在其自己的子 json 数组中,而只是将 spot_name 设为 斑点。像这样:

spots: "backend"

我知道这是因为它获得了 2 列,然后我隐藏了 1 列。

这是不可能的,还是我只是走错了路?任何信息都会很棒。

【问题讨论】:

  • 如果spots 返回两条记录,比如spots: [{spot_name: 'front_end'}, {spot_name: 'backend'}],会怎样?还是spotshasOne()belongsTo() 关系?如果是这样,它的名字就很糟糕;应该是spot。此外,$user->get() 的错误变量名,它返回 multiple User 实例;考虑重命名为$users
  • 很抱歉,这些名字已经被删减和更改,因为它们相当长。但是,它被命名为点,因为在该示例中,表是点,但基于点_uid 返回。所以,它只能返回一个。您对 json 显示斑点的投诉是我要删除的。那就是问题所在。我还想从传出的 json 中删除名称点。只留下那 1 个点名。

标签: php json laravel eloquent


【解决方案1】:

您可以使用集合格式化输出:

$user->map(function ($x) {
  $arr = $x->toArray();
  $arr['spots'] = $arr['spots'][0]['spot_name'];
  return $arr;
});

然后退出这个用户。

【讨论】:

  • 该代码不起作用。闭包中的$user 是什么?
  • 我的错。修复了@miken32
  • 谢谢!我认为这也应该有效!
【解决方案2】:

你可以的

User::where('active', 1)->withCount(['spots as spot_name' => function ($q) {
                $q->select('spot_name');
            }]);

输出

 {
    ...
    spot_name: 'backend'
 }

【讨论】:

    猜你喜欢
    • 2021-04-12
    • 2021-03-20
    • 2018-09-21
    • 2017-04-10
    • 2016-04-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-09
    • 2015-03-15
    相关资源
    最近更新 更多