laravel api资源添加其他数据

laravel api资源添加其他数据,laravel,laravel-5,Laravel,Laravel 5,假设我有一个产品的API响应 { data: [ { id: 3, name: "Test Product", price: "158.21", quantity: 4, income: 569.56 }, { id: 4, name: "Test Product", price: "58.21", quantity: 3

假设我有一个产品的API响应

{
    data: [
    {
        id: 3,
        name: "Test Product",
        price: "158.21",
        quantity: 4,
        income: 569.56
    },
    {
        id: 4,
        name: "Test Product",
        price: "58.21",
        quantity: 3,
        income: 157.17
    },
    ]
}
有没有一种方法可以像这样把一个产品的所有收入加起来

{
 data: [
    {
        id: 3,
        name: "Test Product",
        price: "158.21",
        quantity: 4,
        income: 569.56
    },
    {
        id: 4,
        name: "Test Product",
        price: "58.21",
        quantity: 3,
        income: 157.17
    },
    ],
    total: 726.73
}
这是我的类
OrderProductResource
,它扩展了
JsonResource

public function toArray($request)
    {
        $quantity = 0;
        $overAllTotal = 0;
        foreach($this->orders as $order){
            $quantity += $order->pivot->quantity; 
        }
        $sub_total = round($this->price * $quantity,2);
        $discount = round((10 / 100) * $sub_total, 2);
        $totalIncome = round(($sub_total - $discount), 2);
        return [
            'id' => $this->id,
            'name' => $this->name,
            'price' => $this->price,
            'quantity' => $quantity,
            'income' => $totalIncome,
        ];
    }
我尝试在laravel中使用
with
方法,但API响应仍然相同

这是我的控制器

public function index(){
        $errorFound = false;
        $error = ['error' => 'No Results Found'];
        $products = Product::with('orders');
        if (request()->has('q')) {
            $keyword = '%'.request()->get('q').'%';
            $builder = $products->where('name', 'like', $keyword);
            $builder->count() ? $products = $builder : $errorFound = true;
        }
        return $errorFound === false ? OrderProductResourceCollection::collection($products->latest()->paginate()) : $error;
    }
试试这个:

public function toArray($request)
{
    $quantity = 0;
    $overAllTotal = 0;
    foreach($this->orders as $order){
        $quantity += $order->pivot->quantity; 
    }
    $sub_total = round($this->price * $quantity,2);
    $discount = round((10 / 100) * $sub_total, 2);
    $totalIncome = round(($sub_total - $discount), 2);
    return [
        'id' => $this->id,
        'name' => $this->name,
        'price' => $this->price,
        'quantity' => $quantity,
        'income' => $totalIncome,

        //your relation
        'realtion_name' => $this->relation_name
    ];
}
试试这个:

public function toArray($request)
{
    $quantity = 0;
    $overAllTotal = 0;
    foreach($this->orders as $order){
        $quantity += $order->pivot->quantity; 
    }
    $sub_total = round($this->price * $quantity,2);
    $discount = round((10 / 100) * $sub_total, 2);
    $totalIncome = round(($sub_total - $discount), 2);
    return [
        'id' => $this->id,
        'name' => $this->name,
        'price' => $this->price,
        'quantity' => $quantity,
        'income' => $totalIncome,

        //your relation
        'realtion_name' => $this->relation_name
    ];
}
您需要为产品模型中的合计
数量
收入
定义2

public function getQuantityAttribute() 
{ 
    $quantity = 0; 

    foreach($this->orders as $order){ 
       $quantity += $order->pivot->quantity; 
    } 

    return $quantity;
}

public function getIncomeAttribute()
{
    $sub_total = $this->price * $this->quantity;

    $discount = round((10 / 100) * $sub_total, 2); 

    return round(($sub_total - $discount), 2); 
}
像这样更改
OrderProductResource

public function toArray($request)
{
    return [
        'id' => $this->id,
        'name' => $this->name,
        'price' => $this->price,
        'quantity' => $this->quantity,
        'income' => $this->income,
    ];
}
namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\ResourceCollection;

class OrderProductResourceCollection extends ResourceCollection
{
    public function toArray($request)
    {
        return [
            'data' => $this->collection,
            'total' => $this->collection->sum('income')
        ];
    }
}
$products = Product::with('orders')->get();
return response()->json(new OrderProductResourceCollection($products));
像这样为
OrderProductResource
创建一个资源集合类
OrderProductResourceCollection

public function toArray($request)
{
    return [
        'id' => $this->id,
        'name' => $this->name,
        'price' => $this->price,
        'quantity' => $this->quantity,
        'income' => $this->income,
    ];
}
namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\ResourceCollection;

class OrderProductResourceCollection extends ResourceCollection
{
    public function toArray($request)
    {
        return [
            'data' => $this->collection,
            'total' => $this->collection->sum('income')
        ];
    }
}
$products = Product::with('orders')->get();
return response()->json(new OrderProductResourceCollection($products));
现在在控制器中,像这样使用它

public function toArray($request)
{
    return [
        'id' => $this->id,
        'name' => $this->name,
        'price' => $this->price,
        'quantity' => $this->quantity,
        'income' => $this->income,
    ];
}
namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\ResourceCollection;

class OrderProductResourceCollection extends ResourceCollection
{
    public function toArray($request)
    {
        return [
            'data' => $this->collection,
            'total' => $this->collection->sum('income')
        ];
    }
}
$products = Product::with('orders')->get();
return response()->json(new OrderProductResourceCollection($products));
您可以在此处查看资源收集文档

您需要为产品模型中的合计
数量
收入
定义2

public function getQuantityAttribute() 
{ 
    $quantity = 0; 

    foreach($this->orders as $order){ 
       $quantity += $order->pivot->quantity; 
    } 

    return $quantity;
}

public function getIncomeAttribute()
{
    $sub_total = $this->price * $this->quantity;

    $discount = round((10 / 100) * $sub_total, 2); 

    return round(($sub_total - $discount), 2); 
}
像这样更改
OrderProductResource

public function toArray($request)
{
    return [
        'id' => $this->id,
        'name' => $this->name,
        'price' => $this->price,
        'quantity' => $this->quantity,
        'income' => $this->income,
    ];
}
namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\ResourceCollection;

class OrderProductResourceCollection extends ResourceCollection
{
    public function toArray($request)
    {
        return [
            'data' => $this->collection,
            'total' => $this->collection->sum('income')
        ];
    }
}
$products = Product::with('orders')->get();
return response()->json(new OrderProductResourceCollection($products));
像这样为
OrderProductResource
创建一个资源集合类
OrderProductResourceCollection

public function toArray($request)
{
    return [
        'id' => $this->id,
        'name' => $this->name,
        'price' => $this->price,
        'quantity' => $this->quantity,
        'income' => $this->income,
    ];
}
namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\ResourceCollection;

class OrderProductResourceCollection extends ResourceCollection
{
    public function toArray($request)
    {
        return [
            'data' => $this->collection,
            'total' => $this->collection->sum('income')
        ];
    }
}
$products = Product::with('orders')->get();
return response()->json(new OrderProductResourceCollection($products));
现在在控制器中,像这样使用它

public function toArray($request)
{
    return [
        'id' => $this->id,
        'name' => $this->name,
        'price' => $this->price,
        'quantity' => $this->quantity,
        'income' => $this->income,
    ];
}
namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\ResourceCollection;

class OrderProductResourceCollection extends ResourceCollection
{
    public function toArray($request)
    {
        return [
            'data' => $this->collection,
            'total' => $this->collection->sum('income')
        ];
    }
}
$products = Product::with('orders')->get();
return response()->json(new OrderProductResourceCollection($products));

您可以在此处检查资源集合的文档

当我这样放置它时,它将重复当我这样放置它时,它将重复\Database\Query\Builder::mapInto不存在。return$errorFound==false?response()->json(OrderProductResourceCollection::collection($products->latest()->paginate()):$error;但是,当我在扩展JsonResource的典型资源类上尝试它时,它仍然可以正常工作。方法illumb\Database\Query\Builder::mapInto不存在。return$errorFound==false?response()->json(OrderProductResourceCollection::collection($products->latest()->paginate()):$error;但是,当我在一个扩展JsonResource的典型资源类上尝试它时,它仍然很好地工作,仍然和sirLet us一样。您使用的是哪种转换器?分形?你用的是哪种变压器?分形?