#php #laravel #laravel-4
#php #laravel #laravel-4
Вопрос:
У меня есть restaurant
модель и waitingtime
model. соотношение один ко многим, все работает, я могу обновлять, редактировать и удалять
Я могу получить все время ожидания для определенного ресторана следующим образом
public function edit($id)
{
$res = Restaurant::find(4);
$allWaitingTimesForThisRestaurant = $res->waitingtimes()->get();
Это дает мне массив, и я доволен использованием его в моем jquery при возврате страницы.
Мой вопрос
есть ли какой-нибудь способ, чтобы я все еще мог получить все время ожидания для определенного ресторана, но без определенного времени ожидания
например, входные данные для функции редактирования являются $id
, и это $allWaitingTimesForThisRestaurant = $res->waitingtimes()->get();
возвращает массив времени ожидания, поэтому мне нужен этот массив, но без времени ожидания с id=$id
не могли бы вы мне помочь, пожалуйста?
Я чувствую, что я недостаточно хорошо объяснил свою проблему, если так, пожалуйста, скажите мне, чтобы я объяснил больше.
много tnanks
Комментарии:
1. Вам нужны все
WaitingTime
для конкретного ресторана, кроме одной с заданнымid
?2. @PatrickReck да, точно.
3. @PatrickReck нет помощи, пожалуйста?
4. Я только что отправил ответ. Вы можете увидеть это под этим комментарием
Ответ №1:
Почему бы просто не использовать обычный where?
$res = Restaurant::find(4);
$allWaitingTimesForThisRestaurant = $res->waitingtimes()->where('id', '!=', $res)->get();
Редактировать: Также смотрите комментарий Хейлвуда ниже для хорошего дополнения.
Комментарии:
1. Вероятно, вам следует добавить примечание о том, как метод -> waitingtimes() vs -> waitingtimes возвращает экземпляр query builder, чтобы вы могли использовать там любые методы.
2. Большое спасибо, это работает, и мне жаль, что я не могу поддержать ваш ответ, потому что у меня недостаточно репутации
3. Какое хорошее решение, спасибо, сэр! Я часами боролся с собой за это. Когда я прочитал ваш ответ, я сразу вспомнил, что в документах говорилось о вызове -> method и method() — это две разные вещи. Спасибо вам еще раз.
Ответ №2:
Самый простой способ, использующий наименьшее количество кода, — это удалить его после извлечения их всех.
public function edit($id)
{
$res = Restaurant::find(4);
$allWaitingTimesForThisRestaurant = $res->waitingtimes()->get();
foreach($allWaitingTimesForThisRestaurant as $restaurant) {
if ($restaurant->id == $id) unset($restaurant);
}
Насколько я помню, вам придется написать SQL самостоятельно, если вы не хотите удалять его впоследствии.
Комментарии:
1. Большое спасибо за вашу помощь, но другой ответ так же лучше. Я не могу поддержать ваш вопрос, потому что у меня недостаточно репутации, большое спасибо