Ставим скобки при вызове методов из модели laravel

Мой маршрут выглядит так:

    Route::get('/tags/post/{id}', function ($id){
    $post = Post::find($id);

    foreach ($post->tags as $tag) {
        return $tag;
    }
});

Метод tags() в Post Model выглядит так:

    public function tags() {
    return $this->morphToMany('App\Models\Tag', 'taggable');
}

В этой конфигурации мой код будет работать, но когда я ставлю скобки после метода tags в web.php, мой код возвращает null:

    Route::get('/tags/post/{id}', function ($id){
    $post = Post::find($id);

    foreach ($post->tags() as $tag) {
        return $tag;
    }
});

Мне нужно знать, когда я ставлю скобки после имени метода вызова?

$post->tags является Свойство и эквивалентен вызову Метод$post->tags()->get(). $post->tags() позволяет вам делать дополнительные запросы, например $post->tags()->where(...), затем вы завершаете их замыканием, например ->get() или ->first()
Tim Lewis 22.04.2022 22:25

При этом добавление return $tag; в это foreach() ничего не делает... Что вы хотите, чтобы этот маршрут делал? Обычно вы возвращаете view(), response() или redirect() и т. д.

Tim Lewis 22.04.2022 22:28

Спасибо, Тим, сейчас я смотрю udemy.com/курс/… этот курс, я абсолютный новичок в laravel. Мне просто нужно было знать, когда ставить скобки. Спасибо за очень быстрый ответ.

r0pe-12 22.04.2022 22:40

Ах попался! Да, в Laravel, особенно с моделями, использование или отсутствие () имеет значение огромный. Laravel «волшебным образом» преобразует методы отношений, такие как public function tags(), в свойства для быстрого доступа с эквивалентностью, отмеченной выше. Если вы когда-нибудь сомневаетесь, используйте dd(), dd($post->tags) должен показать вам коллекцию, а dd($post->tags()) должен показать вам экземпляр Builder и т. д. Удачного кодирования!

Tim Lewis 22.04.2022 22:44
3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
0
4
30
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

$post->tags является свойством и эквивалентен вызову метода $post->tags()->get(). $post->tags() позволяет вам делать дополнительные запросы, например $post->tags()->where(...), затем вы завершаете их замыканием, например ->get() или ->first( ) – Тим Льюис

Да, в Laravel, особенно с моделями, использование или отсутствие () имеет огромное значение. Laravel «волшебным образом» преобразует методы отношений, такие как публичные теги функций(), в свойства для быстрого доступа с эквивалентностью, отмеченной выше. Если вы когда-нибудь сомневаетесь, используйте dd(), dd($post->tags) должен показать вам коллекцию, а dd($post->tags()) должен показать вам экземпляр Builder и т. д. Удачного кодирования! – Тим Льюис

Другие вопросы по теме