【问题标题】:Select specific column on lazy eager loading query Laravel在延迟加载查询 Laravel 中选择特定列
【发布时间】:2021-02-26 15:57:18
【问题描述】:

我正在使用 Laravel 8。

假设在控制器中调用了 show() 函数,为我提供了一个特定的位置。 目标是返回具有该位置的视图,但事先将关系数据添加到 $location 变量。由于已经有一个位置但它缺少一些数据,我调用加载函数来延迟加载关系。另外,我还需要软删除客户,因此使用这样的闭包:

public function show(Location $location)
{

    $location = $location->load([
                    'customers' => function($query) {
                        $query->withTrashed();
                    }]
                );

    return view('location.EditLocationView', ['location' => $location]);
}

现在,我面临一个问题。我只需要存储在 $location 变量中的客户名称,最好是在数组“['James', 'Christian' ... ]”中

我该怎么做?代码可能看起来与此类似:

public function show(Location $location)
    {

        $location = $location->load([
                        'customers' => function($query) {
                            $query->withTrashed()->select('names')->toArray();
                        }]
                    );

        return view('location.EditLocationView', ['location' => $location]);
    }

$location 应该是这样的:

$位置 = 姓名: .. 纬度:.. 液化天然气:.. 客户:['James', 'Christian' ...]

感谢您的帮助。

【问题讨论】:

    标签: laravel load lazy-evaluation eager


    【解决方案1】:

    急切加载的问题是您不能只选择名称列,您还需要选择外键才能将数据正确映射到类似位置

    $query->withTrashed()->select(['location_id','names'])
    

    如果它是单个 $location 记录,那么您还可以执行延迟加载,因为它会触发一个查询(与上面的急切负载情况相同),然后您可以将客户名称存储在另一个变量中并将其传递给查看。

    $customers = $location->customers()->withTrashed()->pluck('name')->toArray();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-25
      • 2020-07-04
      • 2012-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-24
      • 1970-01-01
      相关资源
      最近更新 更多