【问题标题】:Laravel pluck nested collection to root collectionLaravel 将嵌套集合提取到根集合
【发布时间】:2021-08-25 09:09:29
【问题描述】:

我有一个如上图所示的数据结构。
我想要根集合中用户字段的一些字段,但我不知道如何才能得到。

public function index (Request $request) {
    $draw = $request->get('draw');
    $start = $request->get('start');
    $length = $request->get('length');

    $order = Order::with('user');
    $total_order = $order->count();
    $orders =  Order::with('user')->offset($start)->limit($length)->get();

    /*$draw = ceil($total_order/$length);*/
    return response()->json([
        'draw' => $draw,
        'recordsTotal' => $total_order,
        'recordsFiltered' => $total_order,
        'data' => $orders,
    ]);
}

【问题讨论】:

  • 这能回答你的问题吗? Pluck with multiple columns?
  • 不,它没有帮助
  • 您能否将实际和期望的结果发布为文本而不是图像?此外,我不确定图片是否说明了return response()->json([ ... ]); 返回的内容。
  • 为什么你存储$order而不使用值?
  • 你的问题太含糊了。您的标题暗示您想从数据中提取多列,但是您没有尝试在代码中选择任意数量的列...使用我提供的链接,您可以执行$orders->pick('count', 'user.name') 仅选择countuser->name 属性。

标签: php laravel web backend laravel-8


【解决方案1】:

平面图方法看起来很奇怪,你有两个模型 Order 和 Users,要么你必须动态地为订单添加额外的属性,如果你想再次保存模型,这在 Laravel 中很奇怪。或者您必须将其转换为数组,从而失去模型功能。

而不是试图将用户对象展平到订单上。您已经在使用with(),因此您的用户已被急切加载并且可以依赖它。而是使用 Eloquent Getters 并将您的用户字段映射到订单。

class Order extends Model
{
    public function getUserNameAttribute() {
        return $this->user->name;
    }
}

Eloquent getters 函数名的格式必须为getPropertyAttribute。现在您可以像这样访问它,这也可以在刀片等中完成。

foreach ($orders as $order) {
    $userName = $order->userName;
} 

【讨论】:

    【解决方案2】:

    如果你真的想要根集合中的相关值,你可以在表上做一个左连接:

    $orders = Order::leftJoin('users', 'users.id', '=', 'orders.user_id')
    

    (根据模型名称,这些将是正确的表名和列名)。

    但是,就像 Mrhn 刚刚指出的那样,尝试在主模型的根集合中拥有相关表的数据并不是很像 Eloquent。

    附:如果你确实使用了左连接,一定要只选择你需要的数据,否则覆盖订单数据(如id

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-08-19
      • 1970-01-01
      • 1970-01-01
      • 2018-10-10
      • 2017-08-03
      • 2016-12-14
      • 1970-01-01
      相关资源
      最近更新 更多