2016-03-18 4 views
1

У меня есть таблица базы данных «мильяж», который содержит 3 колонки:Laravel запрос не возвращает никаких данных

start_location 
end_location 
miles 

Мой запрос построен с помощью селектора области видимости в моей пробег модели (стартовая_позиция и end_location становятся прошли в надлежащим образом):

//Get miles for the start_location -> end_location 

public function scopeMileageDistance($query) 
{ 
    return $query->where('start_location', '=', 'start_location')->where('end_location', '=', 'end_location'); 
} 

//THIS ONE WORKS 
//Get a list of the locations from the DB 
public function scopeMileageLocations($query) 
{ 
    return $query->select('start_location')->groupBy('start_location'); 
} 

Я к нему доступ в моем контроллере так же, как я доступ к моему месторасположению запроса (который работает):

//WORKS 
$locations = Mileage::MileageLocations()->get(); 
//DOES NOT WORK 
$distance = Mileage::MileageDistance()->get(); 

Когда я dumpordie:

dd($distance); 

Он показывает, как не возвращая ничего. Но если я запускаю этот SQL запрос в базе данных - он получает обратно соответствующий объект:

select * from mileages where start_location = 'pointA' and end_location = 'pointB' 

я доступ к этому из вызова Ajax, который вызывается, когда пользователь делает выбор раскрывающийся:

 $.ajax({ 
      url: 'created', 
      type: 'POST', 
      data: {_token: CSRF_TOKEN, start_location:start_location.value, end_location:end_location.value}, 
      dataType: 'JSON', 
      success: function (data) { 
      console.log(data); 
       $("#result").append(JSON.stringify(data)); 
       return data; 
      } 
     }); 

Просто интересно, что я делаю что-то неправильно с помощью селектора и/или запроса.

+1

Вы должны использовать '' return'' в своей области –

ответ

1

Да, поскольку вам необходимо пройти несколько пар ameter вашей функции:

public function scopeMileageDistance($query, $start, $end) 
{ 
    $query->where('start_location', '=', $start)->where('end_location', '=', $end)->get(); 
} 

Таким образом, вы можете использовать его с чем-то вроде этого:

$start = $request->get($start_location); 
$end = $request->get($end_location); 
... 
     ->scopeMileageDistance($start, $end); 
... 

Я надеюсь, что это помогает.

0

вам нужно вернуть строитель

public function scopeMileageDistance($query) 
{ 
    return $query->where('start_location', '=','start_location') 
    ->where('end_location', '=', 'end_location'); 
} 
0

Попробуйте удалить get() из диапазона и добавить return.

public function scopeMileageDistance($query) 
{ 
    return $query->whereStartLocation('start_location')->whereEndLocation('end_location'); 
} 

Дело в том, что вы ничего не возвращаете из сферы действия, поэтому вы получаете пустой результат.

+0

Все еще не работает. Возможно, это что-то с моим аяксом. – Hanny

+0

Возможно, но, чтобы найти ошибку, вы должны использовать этот код (с 'return' и без' get() '). –

+0

Я обновил свой код и обновил свой вопрос, чтобы отразить его. Я ценю вход! – Hanny

0

Вы добавили параметр where в запросе:

я говорю о точке А & pointB

И вам нужно возвращает запрос

return $query->where('start_location', '=', 'pointA')->where('end_location', '=', 'pointB')->get(); 
0

Попробуйте это:

public function scopeMileageDistance($query) 
{ 
    return $query->whereStartLocation('start_location')->whereEndLocation('end_location'); 
} 
+0

Все еще не работает. Возможно, это что-то с моим аяксом. – Hanny