Laravel:Eloquent Eager加载自定义查询

时间:2016-12-19 14:51:12

标签: php laravel

我想急切加载下面这段代码。

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

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

调用索引方法。

  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;
}

最好的方法是什么?

我以为我可能会这样做。

PlateContainer模型

div {
  -webkit-animation-fill-mode: forwards;
  animation-duration: 2s;
  animation-name: a;
  background-color: #a00;
  display: inline-block;
  padding: 50px;
}

div:hover {
  -webkit-animation-fill-mode: backwards;
  animation-duration: 2s;
  animation-name: a;
  animation-direction: reverse;
}

@keyframes a {
  0% {
    padding: 50px;
  }
  100% {
    padding: 100px 200px;
  }
}

但是这会返回

  

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

感谢您的时间。

1 个答案:

答案 0 :(得分:0)

我的猜测是,当你这样做时,你正在调用错误的关系:

$this->load('slotsCount');

' slotsCount()'只是一种没有“addEagerConstraints()'方法

真正的关系是' containerSlots'正如我从代码中猜到的那样。

在类似情况下进行一些测试后,我认为溶剂可能是:

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

所以调用' getSlotsCountAttribute()',第一个eagers加载关系,然后返回计数。