2016-12-19 7 views
1

次のコードを熱心に読み込みたいと思います。Laravel:Eloquent Eagerをカスタムクエリでロードする

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(); 

インデックスメソッドの呼び出し時。

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

しかし、これは

"メッセージ" を返します: "メソッドaddEagerConstraintsが存在しません。"、お時間を

感謝を。

答えて

0

私の推測では、あなたが行うとき、あなたは間違った関係を呼び出しているということです。

$this->load('slotsCount'); 

「slotsCountは()」「addEagerConstraints()」メソッドを持っていないだけの方法です。

実際の関係は、コードから推測できるように 'containerSlots'です。

類似の状況では、いくつかのテストの後、私はsollutionは可能性を考える:

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

だから、「getSlotsCountAttribute()」の呼び出し、最初のeagersは関係をロードし、その後、数を返します。

+0

これは、空の配列 '' get_slots_count_attribute ':[] 'を返します。 – user3641381

+0

空の結果セットは、データによっては有効な結果です。 'slotsCount()'のクエリは実際に情報を取得していますか?私はクエリがその仕事を最初にしていることを確認します。 –

+0

'slotsCount()'は何も返しません。私は、それがちょうどうまく動作するクエリの倍数の時間をチェックしました。 – user3641381

関連する問題