За последние 24 часа нас посетил 18321 программист и 1650 роботов. Сейчас ищут 1077 программистов ...

Ошибка в методе show

Тема в разделе "Laravel", создана пользователем lordconst, 20 мар 2020.

  1. lordconst

    lordconst Активный пользователь

    С нами с:
    7 дек 2019
    Сообщения:
    154
    Симпатии:
    1
    У меня логика этой страницы такая: в виде карточек выводятся на экран все помещения в аренду (иными словами объявление о сдаче помещения в аренду). На каждой карточке есть кнопка Дополнительно, которая ведет на страницу, обрабатываемую методом show у контроллера. Вот здесь-то и нужно вывести не просто информацию о помещении, но и о владельце объявления: контактное лицо и название организации
     
  2. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.853
    Симпатии:
    748
    Адрес:
    Татарстан
    мне кажется вам надо какие-то основы знать/понимать
    сделайте dd($room)l перед return
    результат приведите здесь
     
  3. lordconst

    lordconst Активный пользователь

    С нами с:
    7 дек 2019
    Сообщения:
    154
    Симпатии:
    1
    {#332 ▼
    +"id": 1
    +"person_id": 1
    +"name": "March Hare."
    +"created_at": "2020-03-23 09:39:55"
    +"updated_at": "2020-03-23 09:39:55"
    +"square": 22
    +"rent_price": 9654
    +"image": null
    +"description": "Alice, as she heard a little of it?' said the."
    +"user_id": 4
    +"type": "Duchess."
    +"fio": "Dwight Hahn III"
    +"name_organization": "Dickens, Walter and Leannon"
    }
    Вот что он вернул. Но это неверно. Это помещение с id = 5. Вот скрины из базы (вложение). Получается, у комнаты с номером 5 должен быть привязан человек с id = 3. Однако, он выбирает вообще самого первого пользователя. И это логично, ведь у меня метод first(). А как тогда вытащить данные именно того человека, который привязан к этому помещению? Каким методом вместо fist?
     

    Вложения:

  4. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.579
    Симпатии:
    1.759
    Вот зачем тебе здесь параметр $id, если он не участвует в запросе? Как должен участвовать - не могу знать, не видел твоих таблиц. И если тебе нужно больше одной комнаты вывести, то да, получаешь коллекцию, выводишь циклом foreach.
    Что ты имеешь в виду? Есть что, необычные?

    Ты просто не понимаешь и не пытаешься понять, что ты делаешь. Ты хочешь: "напиши вот так, получишь вот это"....
     
  5. lordconst

    lordconst Активный пользователь

    С нами с:
    7 дек 2019
    Сообщения:
    154
    Симпатии:
    1
    всмысле зачем? это же метод show, он показывает именно одно помещение в более подробном виде. А для вывода всех помещений у меня метод index
    я имел ввиду не через Room:: а через DB::. А то тут про модель говорили, про конструктор, я сам уже запутался. Неужели нельзя показать одной строчкой кода как должно быть по нормальному? Давно бы решил проблему, ежели бы помогли по-человечески
     
  6. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.579
    Симпатии:
    1.759
    Где он у тебя куда-то передаётся, чтоб база тебе вернула только одно помещение?
     
  7. lordconst

    lordconst Активный пользователь

    С нами с:
    7 дек 2019
    Сообщения:
    154
    Симпатии:
    1
    зачем куда-то передавать? у меня в представлении вот такой код:
    PHP:
    1. <div class="col-4">
    2.             <div class="card">
    3.                 <div class="card-body">
    4.                     <div class="card-title">
    5.                         <h4>{{ $room->name }}</h4>
    6.                     </div>
    7.                     <div class="card-img" style="background-image: url({{ $room->image ?? asset('img/default.jpg') }})"></div>
    8.                     <p class="card-text">{{ $room->description }}</p>
    9.                 </div>
    10.                 <ul class="list-group list-group-flush">
    11.                     <li class="list-group-item">Площадь: {{ $room->square }} кв.м.</li>
    12.                     <li class="list-group-item">Стоимость: {{ $room->rent_price }} руб/мес</li>
    13.                 </ul>
    14.                 <a href="{{ route('room.show', ['id' => $room->id]) }}" class="btn btn-outline-primary">Дополнительно</a>
    15.             </div>
    16.         </div>
    Кнопка Дополнительно и ведет на страницу конкретного помещения. Полагаю, нужно where в запросе с id этого помещения? Но я пробовал, ошибку выдает
     
  8. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.579
    Симпатии:
    1.759
    Ага, нужно :) Откуда база знать может, что тебе возвращать, если ты не указал этого явно?

    Пробовать-то надо с умом, не методом тыка.
     
  9. lordconst

    lordconst Активный пользователь

    С нами с:
    7 дек 2019
    Сообщения:
    154
    Симпатии:
    1
    и опять же - как это должно выглядеть?) уже в миллионный раз спрашиваю, ибо пробовал добавлять раздел where, но ошибку выдавало
    PHP:
    1. $room = DB::table('rooms')
    2.             ->join('people', 'rooms.person_id', '=', 'people.id')
    3.             ->select('rooms.*', 'people.*')
    4.             ->where('rooms.person_id', '=', 'people.id')
    5.             ->first();
     
  10. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.579
    Симпатии:
    1.759
    @lordconst, я тебе много раз писал, что в запросе должен быть тот $id, который пришёл в аргументе, ты опять показываешь запрос без него... Ты какую сущность пытаешься получить, Room, что-ли?
    --- Добавлено ---
    Вот это прочитано от начала до конца? https://laravel.com/docs/7.x
     
  11. lordconst

    lordconst Активный пользователь

    С нами с:
    7 дек 2019
    Сообщения:
    154
    Симпатии:
    1
    ну да. но только у нас ведь это Id помещения, а в запросе он нигде не используется. Я имею ввиду по логике запроса: мы связываем одну таблицу с другой по полям, которые с id помещения не связаны напрямую. они просто в одной таблице находятся, поля эти.
    с английским не очень, я читал русские документации. я еще раз повторю: новичку хоть миллион ссылок скинь, он не понимает как правильно искать нужное среди информации. По себе знаю с обеих сторон баррикад.
    Поэтому прошу просто показать где этот чертов id должен быть. Я так гораздо быстрее все пойму, чем если мячик друг другу перекатывать каждый раз
     
  12. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.579
    Симпатии:
    1.759
    печалька. Русские все сайты отстают по версиям значительно

    А почему нигде не используется?
    --- Добавлено ---
    Объясняю: при освоении нового фреймворка, документация читается с первой страницы по последнюю.

    Лично мне интересно понять логику, почему это $id надо получить в экшене, но не использовать в запросе. Вот расскажешь, тогда будем кодом жанглировать. Поскольку я помогаю на "волонтёрских" началах, я делаю это так, как считаю нужным.
     
  13. lordconst

    lordconst Активный пользователь

    С нами с:
    7 дек 2019
    Сообщения:
    154
    Симпатии:
    1
    а это по видеоуроку так. Причем вроде бы автор объясняет что и как, я этот курс искал еще специально. Это не тот, что на ютубе один парень делает по официальной документации, а другой человек. Мне показалось, объясняет более понятно что-ли. К примеру, для себя я многое понял, чего не было с тем на ютубе.
    Полагаю, он сделал его, чтобы в адресной строке отображался id помещения. А я сам хз где его нужно использовать в запросе) поэтому и создаю здесь тему
     
  14. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.579
    Симпатии:
    1.759
    Ну дай хоть ссылку. А то я вот 6 лет уже зарабатываю деньги на php, но не знаю, глупый такой, каким образом база узнаёт про id, если ей его не передать....
     
  15. lordconst

    lordconst Активный пользователь

    С нами с:
    7 дек 2019
    Сообщения:
    154
    Симпатии:
    1
    он на рутрекере, но даже если и так, вряд ли будешь скачивать)
    так как написать запрос, чтобы он выдал правильную инфу?
     
  16. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.579
    Симпатии:
    1.759
    PHP:
    1. $room = DB::table('rooms')
    2.            ->join('people', 'rooms.person_id', '=', 'people.id')
    3.            ->select('rooms.*', 'people.*')
    4.            ->where('rooms.id', '=', $id)
    5.            ->first();
    неужели не очевидно?
     
  17. lordconst

    lordconst Активный пользователь

    С нами с:
    7 дек 2019
    Сообщения:
    154
    Симпатии:
    1
    спасибо. Я так и попробовал изначально, когда речь зашла о where. Но я $id прописывал без знака доллара и в кавычках, поэтому ошибку выдавало)
     
  18. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.579
    Симпатии:
    1.759
    Полез в Laravel, не зная, зачем знак доллара в php? Умно...
     
  19. lordconst

    lordconst Активный пользователь

    С нами с:
    7 дек 2019
    Сообщения:
    154
    Симпатии:
    1
    а по какой причине в compact без знака доллара? я уж не настолько зеленый
     
  20. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.579
    Симпатии:
    1.759
    compact - особый случай, отход от правил. Так может работать только она. Как раз за такие фокусы многие не любят PHP.
     
  21. lordconst

    lordconst Активный пользователь

    С нами с:
    7 дек 2019
    Сообщения:
    154
    Симпатии:
    1
    так ошибаться может только новичок;)
    в любом случае благодарю за помощь, понял теперь что к чему