Laravel 将嵌套集合提取到根集合
Laravel pluck nested collection to root collection
我有一个如上图所示的数据结构。
我想要根集合中用户字段中的一些字段,但我不知道如何才能得到。
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,
]);
}
平面图方法看起来很奇怪,您有两个模型 Order 和 Users,要么您必须即时向订单添加额外的属性,如果您想再次保存模型,这在 Laravel
中很奇怪。或者您必须将其转换为数组,这样您就失去了模型功能。
而不是试图将用户对象扁平化到订单上。您已经在使用 with()
,因此您的用户已经迫不及待地加载并且可以依赖它。而是使用 Eloquent
Getters 并将您的用户字段映射到订单。
class Order extends Model
{
public function getUserNameAttribute() {
return $this->user->name;
}
}
Eloquent getters 函数名称必须采用 getPropertyAttribute
格式。现在你可以像这样访问它了,这也可以在 blade 等中完成。
foreach ($orders as $order) {
$userName = $order->userName;
}
如果你真的想要根集合中的相关值,你可以在 table:
上进行左连接
$orders = Order::leftJoin('users', 'users.id', '=', 'orders.user_id')
(根据模型名称,这些将是正确的 table 和列名称)。
然而,正如 Mrhn 刚才指出的那样,尝试在主模型的根集合中包含相关 table 的数据并不是很 Eloquent。
P.S。如果你确实使用left join,一定要只select你需要的数据,否则会覆盖Order数据(比如id
)
我有一个如上图所示的数据结构。
我想要根集合中用户字段中的一些字段,但我不知道如何才能得到。
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,
]);
}
平面图方法看起来很奇怪,您有两个模型 Order 和 Users,要么您必须即时向订单添加额外的属性,如果您想再次保存模型,这在 Laravel
中很奇怪。或者您必须将其转换为数组,这样您就失去了模型功能。
而不是试图将用户对象扁平化到订单上。您已经在使用 with()
,因此您的用户已经迫不及待地加载并且可以依赖它。而是使用 Eloquent
Getters 并将您的用户字段映射到订单。
class Order extends Model
{
public function getUserNameAttribute() {
return $this->user->name;
}
}
Eloquent getters 函数名称必须采用 getPropertyAttribute
格式。现在你可以像这样访问它了,这也可以在 blade 等中完成。
foreach ($orders as $order) {
$userName = $order->userName;
}
如果你真的想要根集合中的相关值,你可以在 table:
上进行左连接$orders = Order::leftJoin('users', 'users.id', '=', 'orders.user_id')
(根据模型名称,这些将是正确的 table 和列名称)。
然而,正如 Mrhn 刚才指出的那样,尝试在主模型的根集合中包含相关 table 的数据并不是很 Eloquent。
P.S。如果你确实使用left join,一定要只select你需要的数据,否则会覆盖Order数据(比如id
)