Laravel обновление таблицы из publi c помощник класса не работает - PullRequest
0 голосов
/ 13 февраля 2020

Я хочу обновить свою таблицу в своем классе publi c. Но выкидывает ошибку Метод обновления не существует. Это мой класс

public static function Update($id, $city){
    $hotel_name= hotel_info::all()->where('id', $id)->pluck('hotel_name');
    $user_id = auth()->user()->id;
    $plan_hotel_db = plan_hotel::where('travel_id', $user_id)->where('plan_city_id', $city)->get();

    $plan_hotel_db->hotel_name = $hotel_name;

    $plan_hotel_db->update();

    return $plan_hotel_db;
}

Ответы [ 3 ]

1 голос
/ 13 февраля 2020

Метод get() возвращает коллекцию с 0 до многих строк, поскольку вы хотите обновить только одну строку, вы можете сначала использовать метод построителя запросов (); Поэтому ваш запрос должен выглядеть следующим образом.

$plan_hotel_db = plan_hotel::where('travel_id', $user_id)->where('plan_city_id', $city)->first();
1 голос
/ 13 февраля 2020

Вы должны получить первый элемент вашего $plan_hotel_db, так как он вернет массив данных. Чтобы исправить это, измените ваш код на этот.

public static function Update($id, $city){
    $hotel_name= hotel_info::all()->where('id', $id)->pluck('hotel_name');
    $user_id = auth()->user()->id;
    $plan_hotel_db = plan_hotel::where('travel_id', $user_id)->where('plan_city_id', $city)->first();

    $plan_hotel_db->hotel_name = $hotel_name;

    $plan_hotel_db->update();

    return $plan_hotel_db;
}

Или, если вы хотите обновить все его записи, вам следует повторить значение $plan_hotel_db.

0 голосов
/ 13 февраля 2020

Вы можете использовать first() для получения первого элемента.

После прямых изменений на красноречивом объекте вы можете использовать save() для сохранения изменений.

Если вы хотите вытащить fre sh данные из дБ (не обязательно в вашем случае) вы можете использовать $plan_hotel_db = $plan_hotel_db->fresh();

public static function Update($id, $city){
    $hotel_name = hotel_info::all()->where('id', $id)->pluck('hotel_name');
    $user_id = auth()->user()->id;

    $plan_hotel_db = plan_hotel::where([
        ['travel_id', $user_id],
        ['plan_city_id', $city]
    ])
    ->first();

    if (!$plan_hotel_db) {
        return false;
    }

    $plan_hotel_db->hotel_name = $hotel_name;
    $plan_hotel_db->save();

    return $plan_hotel_db;
}
...