在 Laravel 中对关系模型中的数据进行分页
Paginate data from relationship model in Laravel
抱歉,如果标题没有完全理解......我不确定模型链接的确切术语是否是它们控制器中的关联数据。
我正在尝试使用用户创建的 post 对 table 进行分页。
我之前设法对其进行了分页,posttable 中没有 user_id。但是我已经将 user_id
添加到 posts
table,并且 运行 迁移工作正常。
以下是我的Post
模型:
namespace App;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
public function user(){
return $this->belongsTo('App\User');
}
}
这是我的 User
模型:
namespace App;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
{
use Notifiable;
protected $fillable = ['name', 'email', 'password',];
protected $hidden = ['password', 'remember_token',];
public function posts() {
return $this->hasMany('App\Post');
}
}
这是 post 控制器的相关部分:
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Post;
use App\User;
use Session;
use Carbon\Carbon;
class PostController extends Controller
{
public function index()
{
$user_id = auth()->user()->id;
$user = User::find($user_id);
return view('posts.index')->with('posts', $user->posts);
}
我认为这只是将 ->paginate(5)
附加到 PostController
中的 $user
的情况,但这似乎不起作用。
我得到以下信息:
Undefined property: Illuminate\Pagination\LengthAwarePaginator::$posts
我试过在 posts.index
视图中包含 @foreach
之前的 {!! $posts->links() !!}
但这给出了:
Undefined property: Illuminate\Pagination\LengthAwarePaginator::$posts
我正在尝试通过创建此 crud 应用程序来学习 Laravel 基础知识,并尝试将两个教程结合在一起,但我显然遗漏了一些东西。
您可以像这样在关系上调用 ->paginate()
(我还删除了不必要的用户查询,因为 auth()->user()
已经执行了):
public function index()
{
$user = auth()->user();
$posts = $user->posts()->paginate();
// Or with 1 line: $posts = auth()->user()->posts()->paginate();
return view('posts.index')->with('posts', $posts);
}
抱歉,如果标题没有完全理解......我不确定模型链接的确切术语是否是它们控制器中的关联数据。
我正在尝试使用用户创建的 post 对 table 进行分页。
我之前设法对其进行了分页,posttable 中没有 user_id。但是我已经将 user_id
添加到 posts
table,并且 运行 迁移工作正常。
以下是我的Post
模型:
namespace App;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
public function user(){
return $this->belongsTo('App\User');
}
}
这是我的 User
模型:
namespace App;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
{
use Notifiable;
protected $fillable = ['name', 'email', 'password',];
protected $hidden = ['password', 'remember_token',];
public function posts() {
return $this->hasMany('App\Post');
}
}
这是 post 控制器的相关部分:
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Post;
use App\User;
use Session;
use Carbon\Carbon;
class PostController extends Controller
{
public function index()
{
$user_id = auth()->user()->id;
$user = User::find($user_id);
return view('posts.index')->with('posts', $user->posts);
}
我认为这只是将 ->paginate(5)
附加到 PostController
中的 $user
的情况,但这似乎不起作用。
我得到以下信息:
Undefined property: Illuminate\Pagination\LengthAwarePaginator::$posts
我试过在 posts.index
视图中包含 @foreach
之前的 {!! $posts->links() !!}
但这给出了:
Undefined property: Illuminate\Pagination\LengthAwarePaginator::$posts
我正在尝试通过创建此 crud 应用程序来学习 Laravel 基础知识,并尝试将两个教程结合在一起,但我显然遗漏了一些东西。
您可以像这样在关系上调用 ->paginate()
(我还删除了不必要的用户查询,因为 auth()->user()
已经执行了):
public function index()
{
$user = auth()->user();
$posts = $user->posts()->paginate();
// Or with 1 line: $posts = auth()->user()->posts()->paginate();
return view('posts.index')->with('posts', $posts);
}