2017-03-28 16 views
1

I持って、次の表pharmacies,categories,medicinesと私はlaravel雄弁laravel内の複数の関係からデータを取得

を使用しています関係は、この

薬局のような多くの薬きており、医学は一つのカテゴリに属し

medicinesテーブルは他の列

category_id列+を有し

私はIDで薬局を見せたいと思っていますし、カテゴリー別に薬局のオブジェクトを返す必要があります。各カテゴリにはこの薬局に薬のオブジェクトがあります。どのカテゴリーにも薬がない場合は、それを返すべきではありません。

私はすべてのアイデアは、カテゴリモデル

class Category extends Model 
{ 
    protected $table = 'categories'; 

    public function pharmacies() 
    { 
     return $this->belongsToMany(Pharmacy::class, 'pharmacy_category', 'category_id', 'id'); 
    } 

    public function medicines() 
    { 
     return $this->hasMany(Medicine::class); 
    } 
} 

薬局モデル

class Pharmacy extends Model 
{ 
    use SoftDeletes; 
    protected $table = 'pharmacies'; 

    protected $appends = ['favourite']; 

    public function categories() 
    { 
     return $this->belongsToMany(Category::class,'pharmacy_category','pharmacy_id','id'); 
    } 

    public function getFavouriteAttribute() 
    { 
     if (!Auth::check()) { 
      return 0; 
     } 
     return (FavouritePharmacy::where('user_id', Auth::user()->id)->where('pharmacy_id', $this->id)->count() == 1) ? 1 : 0; 
    } 
} 

医学モデル

有用である可能性

そのモデルの関係の問題を考えます

class Medicine extends Model 
{ 

    protected $appends = ['favourite']; 

    public function orders() 
    { 
     return $this->belongsToMany(Order::class); 
    } 

    public function getFavouriteAttribute() 
    { 
     if (!Auth::check()) { 
      return 0; 
     } 
     return (FavouriteMedicine::where('user_id', Auth::user()->id)->where('medicine_id', $this->id)->count() == 1) ? 1 : 0; 
    } 
} 
+0

コードはありますか? – Laerte

+0

あなたの質問は、回答を受け取るために最低限の努力を実証する必要があります。この場合、それはしません。これを達成しようとする試みや関連するエラーをお見せください。 – Ohgodwhy

+0

私は質問を更新しました –

答えて

1

あなたは薬局の情報を表示したい場合は、薬とのカテゴリ、これらの関係で、私はこれを行うだろう:

$pharmacy = Pharmacy::find($id); 

$categoriesWithMedicines = Category::whereHas('medicines', function($q) use($id) { 
     $q->where('pharmacy_id', $id); 
    }) 
    ->with(['medicines' => function($q) use($id) { 
     $q->where('pharmacy_id', $id); 
    }]) 
    ->get(); 

次にビューで、あなたは薬局の対象としてカテゴリのリストを持っていますが薬局に属する薬:

@foreach ($categoriesWithMedicines as $category) 
    {{ $category->name }} 
    @foreach ($category->medicines as $medicine) 
     {{ $medicine->name }} 
    @endforeach 
@endforeach 
+1

ありがとう、それは –

+0

私はそれを承認しました –

関連する問題