Метод Illuminate \ Database \ Eloquent \ Collection :: post не существует - PullRequest
1 голос
/ 14 апреля 2019

Извините за такой глупый вопрос, но я сейчас нахожусь в тупике, я работаю над личным проектом с использованием Laravel (впервые кстати) и столкнулся с какой-то проблемой.

Я пытался сделать {{ $kategori->post()->count() }} (это работает кстати) но с таблицей пользователей.Я уже установил внешний ключ и прочее.

Я тоже пытался изменить User.php (см. Код), но все равно не сработало, как я планировал.Мне нужна помощь.И я использую Laravel "php artisan make:auth"

Я пытался отредактировать модель (User.php и Post.php) и контроллер, но я все еще не могу понять, что не так.

Post.php

public function user()
{
    return $this->belongsTo('App\User', 'user_id');
}

User.php

public function post()
{
   return $this->hasMany('App\Post','user_id');
}

Контроллер

use App\User;

// other methods in the Controller

public function index()
{
   $posts = post::paginate(5);
   $user = User::post;
   return view('index', compact('posts', 'user'));   
}

вид лезвия

{{ $user->post()->count() }}

Ответы [ 2 ]

1 голос
/ 14 апреля 2019

Я не понял основного назначения исходного кода Но вы можете использовать следующий код для подсчета отношения

$user_post_count = User::find($id)->post()->count();
$all_user_with_post = User::all()->with('post');
$all_user_with_post_count = User::all()->withCount('post');
0 голосов
/ 15 апреля 2019

Вы звоните post модели, которой нет в этой строке:

$user = User::post;

Это должно быть :: Публикация .

Если выпросто хотите подсчитать количество постов, которые вы должны использовать withCount () , это подсчитает количество постов без их загрузки, что даст вам некоторую производительность.

$user = User::find($id)->withCount('post'); // this will count the number of posts to the given user.
return view('index', compact('user'));   

Вы можете получить доступ к подсчету следующим образом:

{{$user->post_count}}

Вы также можете посчитать количество сообщений всех пользователей:

$users = User::all()->withCount('post');

И сделать цикл foreach для доступа к каждому из них.из них:

@foreach($users as $user)
{{$user->post_count}}
@endforeach

Документы:

Если вы хотите подсчитать количество результатов отношения без фактической их загрузки, вы можете использовать метод withCount, который поместитСтолбец {отношение} _count в ваших результирующих моделях.

Примечание: вы должны назвать свое отношение posts, а не post, так как это отношение один ко многим.

...