laravel как получить все модели, кроме одной

#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. Большое спасибо за вашу помощь, но другой ответ так же лучше. Я не могу поддержать ваш вопрос, потому что у меня недостаточно репутации, большое спасибо