2015-09-26 4 views
0
User : id,name,age 
Shop : id,user_id,name 
Address : id, shop_id, address 
Shop Type : id, shop_id, type 

А [пользователь] имеет мульти [магазин], и [магазин] имеет мульти ветви, поэтому она имеет мульти [адрес], и [магазин] также имеет мульти [типа ], такие как алкоголь, еда, закуски, напитки и многое другое.Laravel 5 фильтров основных данные с отношением

Теперь я хочу получить магазин пользователя со всем адресом и типом магазина. Ниже приведены мои модели:

модель пользователя

public function shop(){ 
    return $this->hasMany('App\Shop'); 
} 

Магазин Класс

public function address(){ 
    return $this->hasMany('App\Address'); 
} 

public function type(){ 
    return $this->hasMany('App\ShopType'); 
} 

Адрес Класс

public function state(){ 
     return $this->hasMany('App\State'); 
    } 

    public function city(){ 
     return $this->hasMany('App\City'); 
    } 

    public function country(){ 
     return $this->hasMany('App\Country'); 
    } 

Мой контроль

public function shop($id) 
    { 
      $shop = User::where("id",$id)->with('shop.address','shop.type')->first(); 
    if($shop){ 
      return response()->json(
       [ 
        'shop' => $shop->shop, 
       ], 
       200, 
       array(), 
       JSON_PRETTY_PRINT 
      ); 
    }else{ 
      return false; 
    } 

Код выше можно получить адрес все магазина и тип магазина в базе данных, , но как я могу сделать фильтр только типа магазина = «пища» и «напиток» и код страны нас с программированием? я стараюсь код ниже, но не работает для меня:

$type = {'food','drink'}; // Example 
$user = {'1'}; // Example 

public function shopWithFilter($id,$type,$country) 
     { 
       $shop = User::where("id",$id)->with('shop.address','shop.type')->where(['shop.type.name'=>$type,'shop.address.country.code',$country])->first(); 
     if($shop){ 
       return response()->json(
        [ 
         'shop' => $shop->shop, 
        ], 
        200, 
        array(), 
        JSON_PRETTY_PRINT 
       ); 
     }else{ 
       return false; 
     } 

Благодарности

ответ

0

проблема решена, ниже мой ответ:

public function shopWithFilter($id,$type,$country) 
{ 
    $shop = User::where("id",$id)->with('shop.address','shop.type') 
    ->whereHas('shop.address' function($q) use($country){ 
     $q->where('name',$country); 
    }) 
    ->whereHas('shop.type' function($q) use($type){ 
     $q->where('name',$type); 
    }) 
    ->first(); 
    if($shop){ 
     return response()->json(
      [ 
       'shop' => $shop->shop, 
      ], 
      200, 
      array(), 
      JSON_PRETTY_PRINT 
     ); 
    }else{ 
     return response()->json(
      [ 
       'shop' => null, 
      ], 
      200, 
      array(), 
      JSON_PRETTY_PRINT 
     ); 
    } 
} 
Смежные вопросы