php Laravel如何通过控制器中的模型示例添加关系查询

mwyxok5s  于 2023-02-11  发布在  PHP
关注(0)|答案(1)|浏览(123)

我在一个Laravel 9项目中工作。我有一个Buyer模型,它有一个名为tiers的关系,我需要在这里加载计数。
现在,我是这样做的:

/**
 * Display the specified resource.
 *
 * @param  int  $id
 * @return \Illuminate\Http\Response
 */
public function show(Company $company, Buyer $buyer)
{
    $this->authorize('view', Buyer::class);

    $buyer = Buyer::where('company_id', $company->id)
                    ->where('id', $buyer->id)
                    ->withCount('tiers')
                    ->first();

    if (!$buyer) {
        return new ApiSuccessResponse(null, [
            'message' => 'Buyer not found or invalid buyer ID.'
        ], 404);
    }

    return new ApiSuccessResponse($buyer);
}

一定有更好的方法,因为购买者示例已经定义并作为函数参数工作。
就像...

/**
 * Display the specified resource.
 *
 * @param  int  $id
 * @return \Illuminate\Http\Response
 */
public function show(Company $company, Buyer $buyer)
{
    $this->authorize('view', Buyer::class);

    $buyer = $buyer->withCount('tiers');

    return new ApiSuccessResponse($buyer);
}

为什么这不起作用,我需要做什么改变才能让它起作用?

zzwlnbp8

zzwlnbp81#

Laravel已经延迟了计数的加载,所以你所需要做的就是使用loadCount而不是withCount,并且不需要重新分配变量:

public function show(Company $company, Buyer $buyer)
{
    $this->authorize('view', Buyer::class);

    $buyer->loadCount('tiers');

    return new ApiSuccessResponse($buyer);
}

相关问题