簡體   English   中英

Laravel:雄辯的雄心勃勃的帶有自定義查詢的加載

[英]Laravel: Eloquent Eager loading with custom query

我想急於加載以下代碼。

  return DB::table('container_slots')
->where('occupied', false)
->join('plate_containers','container_slots.plate_container_id', '=', 'plate_containers.id')
->select('plate_containers.name AS Container', DB::raw('count(container_slots.slot) as no_of_slots'))
->groupBy('plate_container_id')->get();

在調用index方法時。

  public function index()
{
    $plateContainers = PlateContainer::with('equipmentStatusCode','storageLocation','plateContainerType')->paginate(10)->toArray();

    return response()->success($plateContainers);
}

最好的方法是什么?

我以為我可能會做這樣的事情。

PlateContainer模型

  public function slotsCount()
{
  return $this->containerSlots()
  ->where('occupied', false)
  ->join('plate_containers','container_slots.plate_container_id', '=', 'plate_containers.id')
  ->select('plate_containers.name AS Container', DB::raw('count(container_slots.slot) as no_of_slots'))
  ->groupBy('plate_container_id');
}

public function getSlotsCountAttribute()
{
    $this->load('slotsCount');

    $related = $this->getRelation('slotsCount');

    return $related;
}

但這又回來了

“ message”:“方法addEagerConstraints不存在。”,

謝謝你的時間。

我的猜測是,您這樣做時會打錯關系:

$this->load('slotsCount');

“ slotsCount()”只是一種沒有“ addEagerConstraints()”方法的方法。

我可以從代碼中猜出真正的關系是“ containerSlots”。

經過在類似情況下的測試,我認為解決方案可能是:

public function getSlotsCountAttribute()
{
    $this->load('containerSlots');
    return $this->slotsCount();
}

因此,對“ getSlotsCountAttribute()”的調用首先是熱切的加載該關系,然后返回計數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM