Есть модель Post
<?php
namespace App;
use Carbon\Carbon;
use Illuminate\Support\Facades\Storage;
use Illuminate\Database\Eloquent\Model;
use Cviebrock\EloquentSluggable\Sluggable;
use Illuminate\Support\Facades\Auth;
class Post extends Model
{
use Sluggable;
const IS_DRAFT = 0;
const IS_PUBLIC = 1;
protected $fillable = ['title','content', 'date', 'description'];
public function comments()
{
return $this->hasMany(Comment::class);
}
public function getComments()
{
return $this->comments()->where('status', 1)->get();
}
}
В контроллере, ни к какой метод не вызывается, а только идёт обращение ко всей модели, нужной статье
public function show($slug)
{
$post = Post::where('slug', $slug)->firstOrFail();
return view('pages.show', compact('post'));
}
И в виде, вызывается метод $post->getComments, как этот метод попал в вид, если в контроллере, его не передавали? или когда идёт любое обращение к классу, таким способом Post:: то в переменную вшиваются все методы?
Ты в контроллере получил экземпляр модели Post и передаешь этот экземпляр в вод. И нет разницы, где ты используешь этот экземпляр со всеми его методами - в контроллере, виде, консольной команде, задаче, обработчике события и т.д.
Ну и еще момент. Раз уж это метод класса, то и вызавать его надо как метод: $post->getComments()
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости