如何在 Eloquent 和 Blade 中显示带分页的相关项目?
How to show related items with pagination in Eloquent and Blade?
管理员控制器
public function index(){
$someMessages=$this->blog->paginate(5);
$users=User::all();
// return 'Welcome Admin';
return View::make('admin.admin',['someMessages'=>$someMessages,'users'=>$users]);
}
admin.blade.php
这里需要根据 'someMessages' 对象中存储的 uid 显示来自 'users' 变量的用户名。
@extends('layout.default')
@section('title')
<title>Welcome Admin</title>
@stop
@section('content')
@foreach($someMessages as $message)
<blockquote>{{$message['blog']}}
<small>
<cite>
</cite>
</small>
</blockquote>
@endforeach
{{ $someMessages->links()}}
@stop
如果正确定义了博客消息和用户之间的 Eloquent 关系,则无需单独查询用户。你想要做的就是进行预加载:
//in case you call it author in your "relation definition"
$someMessages = $this->blog->with('author')->paginate(5);
然后在您的 Blade 模板中:
@foreach($someMessages as $message)
<div>
<div>{{ $message->blog }}</div>
<div>{{ $message->author->name }}</div>
</div>
@endforeach
如果您还没有宣布关系 - 很简单。打开你的用户 eloquent 模型 class 并添加一个方法:
public function blogs()
{
return $this->hasMany('Blog', 'uid');
}
在博客 eloquent 模型中 class 您将添加:
public function author()
{
return $this->belongsTo('User', 'uid');
}
有关 eloquent 和关系的更多信息,请参见 here。
如果不是这种情况,您仍然可以过滤您的用户集合以获得您想要的:
@foreach($someMessages as $message)
<?php
$user = $users->filter(function($user) use ($message)
{
return $user->id == $message->uid;
})->first();
?>
<div>
<div>{{ $message->blog }}</div>
<div>{{ $user->name }}</div>
</div>
@foreach
这里发生的是你根据 $message->uid
值过滤你的用户集合并从中取出第一个(它应该总是只有一个或 none 因为用户 ID 是唯一的)。
尽管您需要了解,在这种情况下,您将从数据库中获取所有用户,并针对您输出的每条博客消息对他们进行过滤。在这里,预加载是一个更好的主意,如果可能的话,我会坚持使用它。
管理员控制器
public function index(){
$someMessages=$this->blog->paginate(5);
$users=User::all();
// return 'Welcome Admin';
return View::make('admin.admin',['someMessages'=>$someMessages,'users'=>$users]);
}
admin.blade.php
这里需要根据 'someMessages' 对象中存储的 uid 显示来自 'users' 变量的用户名。
@extends('layout.default')
@section('title')
<title>Welcome Admin</title>
@stop
@section('content')
@foreach($someMessages as $message)
<blockquote>{{$message['blog']}}
<small>
<cite>
</cite>
</small>
</blockquote>
@endforeach
{{ $someMessages->links()}}
@stop
如果正确定义了博客消息和用户之间的 Eloquent 关系,则无需单独查询用户。你想要做的就是进行预加载:
//in case you call it author in your "relation definition"
$someMessages = $this->blog->with('author')->paginate(5);
然后在您的 Blade 模板中:
@foreach($someMessages as $message)
<div>
<div>{{ $message->blog }}</div>
<div>{{ $message->author->name }}</div>
</div>
@endforeach
如果您还没有宣布关系 - 很简单。打开你的用户 eloquent 模型 class 并添加一个方法:
public function blogs()
{
return $this->hasMany('Blog', 'uid');
}
在博客 eloquent 模型中 class 您将添加:
public function author()
{
return $this->belongsTo('User', 'uid');
}
有关 eloquent 和关系的更多信息,请参见 here。
如果不是这种情况,您仍然可以过滤您的用户集合以获得您想要的:
@foreach($someMessages as $message)
<?php
$user = $users->filter(function($user) use ($message)
{
return $user->id == $message->uid;
})->first();
?>
<div>
<div>{{ $message->blog }}</div>
<div>{{ $user->name }}</div>
</div>
@foreach
这里发生的是你根据 $message->uid
值过滤你的用户集合并从中取出第一个(它应该总是只有一个或 none 因为用户 ID 是唯一的)。
尽管您需要了解,在这种情况下,您将从数据库中获取所有用户,并针对您输出的每条博客消息对他们进行过滤。在这里,预加载是一个更好的主意,如果可能的话,我会坚持使用它。