2016-10-31 5 views
0

Я не совсем уверен, в чем проблема, потому что я не понимаю сообщение об ошибке, которое я получаю.Непонятные отношения проблемы извлечения отношения «принадлежит»

У меня есть следующие отношения на моей модели автомобиля

/** 
* The dealer the vehicle belongs to (one-to-one relationship) 
* 
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo 
*/ 
public function dealer() 
{ 
    return $this->belongsTo('App\Dealer'); 
} 

/** 
* The vehicle's specifications 
* 
* @return \Illuminate\Database\Eloquent\Relations\HasMany 
*/ 
public function specifications() 
{ 
    return $this->hasMany('App\Specification'); 
} 

Если я вызываю метод ниже, когда есть «провинция» в запросе $ я получаю следующее сообщение об ошибке: Отсутствует аргумент 2 для App \ Project \ Frontend \ Repo \ Vehicle \ EloquentVehicle :: App \ Project \ Frontend \ Repo \ Vehicle {закрыть}()

Я также получаю сообщение об ошибке, когда в запросе есть «город».

public function vehicleSearchResults($request) 
{ 
    $allowedInput = array(
     'year', 
     'make', 
     'model', 
     'city', 
     'province', 
     'price', 
     'Vehicle Type' 
    ); 

    $query = $this->vehicle; 

    foreach($allowedInput as $value) 
    { 
     if($request->has($value)) 
     { 
      switch ($value) 
      { 
       case 'year': 
        $query = $query->where('model_year', $request->input($value)); 
        break; 
       case 'make': 
        $query = $query->where('make', $request->input($value)); 
        break; 
       case 'model': 
        $query = $query->where('model', $request->input($value)); 
        break; 
       case 'price': 
        $query = $query->where('price', $request->input($value)); 
        break; 
       case 'city': 
        $query = $query->whereHas('dealer', function($subQuery, $request, $value) 
        { 
         $subQuery->where('city', $request->input($value)) 
          ->where('province', $request->input('province')); 
        })->with('dealer'); 
        break; 
       case 'province': 
        $query = $query->whereHas('dealer', function($subQuery, $request, $value) 
        { 
         $subQuery->where('province', $request->input($value)); 
        })->with('dealer'); 
        break; 
       case 'Vehicle Type': 
        $query = $query->whereHas('specifications', function($subQuery, $request, $value) 
        { 
         $subQuery->where('spec', $value) 
          ->where('spec_value', $request->input($value)); 
        })->with('specifications'); 
        break; 
      } 
     } 
    } 

    return $query->paginate(10); 
} 

Я понятия не имею, что означает ошибка, но он указывает на эту строку кода в корпусе коммутатора провинции.

$query = $query->whereHas('dealer', function($subQuery, $request, $value) 
+0

вам не хватает обратный вызов в 'с («спецификациями»)' должен быть 'с («спецификацией», функциями (спецификация) {})' Кроме того, 'with ('dealer')' – Beginner

ответ

1

В $request и $value переменные имеют информацию вам нужно использовать в подзапросе, и то, как вы пытались это сделать, было неправильным. вы создавали новые переменные вместо использования существующих. Как это должно выглядеть, как следующее:

->whereHas('dealer', function($subQuery) use($request) 
    { 
     $subQuery->where('province', $request->input($value)); 
    })->with('dealer'); 
0

Попробуйте использовать ->with('dealer') перед тем ->whereHas

$query = $query->with('dealer') 
    ->whereHas('dealer', function($subQuery, $request, $value) { 
     $subQuery->where('city', $request->input($value)) 
      ->where('province', $request->input('province')); 
    }); 
+0

Это не повлияло. Я все еще получаю ту же ошибку. – VenomRush

0

ваш

$query = $query->whereHas('dealer', function($subQuery, $request, $value) { 
    $subQuery->where('province', $request->input($value)); 
})->with('dealer'); 
break; 

должно быть, как это

$search = $request->input($search); 
$query = $query->whereHas('dealer', function($subQuery) use ($search) { 
{ 
    $subQuery->where('province', $search); 
})->with('dealer'); 

вы должны use ($search) в Orde г для доступа к переменным, которые вы хотели в обратного вызова, так как это еще одна функция

+0

Это не имело значения. По-прежнему получает ту же ошибку. Api показывает, что -> with() принимает только один параметр. – VenomRush

0
$query = $query->with('dealer')->whereHas('dealer', function($subQuery) use ($request, $value) 
{ 
    $subQuery->where('city', $request->input($value)) 
     ->where('province', $request->input('province')); 
}); 

использовать только они $ подзапрос в вашем закрытии и использовать use вводить дополнительные переменные

Смежные вопросы