Illuminate\Database\Eloquent\Collection::links方法不存在。

11

我在用户和消息之间创建了一个模型关联。我想为已认证的用户实现一组消息列表,但我遇到了以下错误。

方法Illuminate\Database\Eloquent\Collection :: links不存在

控制器

public function index()
{
    $user_id = auth()->user()->id;
    $user = User::find($user_id);
    return view('message.index')->with('messages', $user->message);
}
消息提供者
class message extends Model
{
    public function user() {
        return $this->belongsTo('App\User');
    }
}
用户提供者
public function message ()
{
    return $this->hasMany('App\Message');
}

index.blade.php

@extends('layouts.app')
@section('content')
    <h1>messages</h1>
    @if(count($messages)>0)
        @foreach ($messages as $message)
            <div class="well">
                <h3><a href="/message/{{$message->id}}">{{$message->user}}</a></h3>
                <small>Written on {{$message->created_at}} </small>
            </div>
        @endforeach
        {{$messages->links()}}
    @else
        <p> no post found </p>
    @endif
@endsection

错误

"Illuminate\Database\Eloquent\Collection::links方法不存在。(视图: C:\xampp\htdocs\basicwebsite\resources\views\message\index.blade.php)"


2
错误消息看起来像是你在index.blade.php文件中调用了一个links()方法。你是这样做的吗?如果不是,你是否在其他地方调用了links()方法? - George Hanson
@GeorgeHanson 感谢您的回答,但我不认为我调用了链接。我是 Laravel 的新手,我将分享 index.blade 视图。 - smouk
看起来你在视图中调用了 links() 方法。你特别调用了 $messages->links()。Laravel 集合类上没有 links() 方法,难道你是想进行分页吗? - George Hanson
你正在调用 links()。看一下:@endforeach {{$messages->links()}} @else - mare96
@mare96 非常感谢,当我删除链接时它起作用了。我使用这些链接来显示与链接相关的消息URL,但是有人能解释一下为什么在这个blade页面中放置链接时它不起作用吗? - smouk
显示剩余4条评论
5个回答

21

请检查你的视图Blade,该方法(links())只能在你的数据模型实现paginate()方法时使用。

如果你没有使用paginate(),请删除这部分内容:

{{$messages->links() }}

9
如果你尝试在视图中分页显示数据,那么你需要在将数据传递给视图之前,在控制器中添加分页功能。示例:
return $users = Users::select('id','name')->paginate(10);

使用控制器中的paginate方法,你可以在视图中调用links方法对对象进行分页,如下所示:

 {{$users->links()}}

希望我能帮助你。

1

有两种方法可以解决这个问题:

  1. 在从数据库中搜索数据时使用paginate函数:

$users = DB::table('users')->where('id',$user_id)->paginate(1);

  1. 从index.blade.php文件中删除links()函数。

{{ $messages->links() }}


1
在您的index.blade.php中,移除{{ $messages->links() }},因为只有在使用paginate时,{{ $messages->links() }}才被支持。

如果你没有新的内容可以添加,那么请不要重复之前的回答。请尝试回答问题。 - Farzin Farzanehnia

0

您可以在控制器文件中执行类似以下的操作。

    public function index()
    {
        $messages = Message::all()->paginate(5);
        $user_id = auth()->user()->id;
        $user = User::find($user_id);
        return view('message.index')->with('messages', $messages, $user->message);
    }

2
考虑到现有的答案,这是否增加了价值? - greybeard

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接