我希望使用Laravel Eloquent获取属于外键的User的名称。
我有帖子型号:
Class Posts Extends Eloquent{
protected $table = 'posts';
protected $fillable = array('title, image, text, user_id');
public $timestamps = false;
}
和 用户模型:
class User extends Authenticatable
{
use Notifiable;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name', 'email', 'password',
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password', 'remember_token',
];
}
我想向控制器发送要查看的用户名,标题,文本,图像的值。
public function index(){
// get all the bears
$posts = Posts::all();
return View::make('welcome', compact('posts'));
}
答案 0 :(得分:0)
为用户设置关系 - >帖子,然后您可以使用hasMany
public function posts(){
return $this->hasMany('App\Post');
}
这将在posts表中查找任何user_id
。如果它的名称不同,那么您可以将其作为第二个参数传递。
public function posts(){
return $this->hasMany('App\Post', name_of_column_in_post_table, name_of_column_in_user_table);
}
在帖子表格中,您需要hasOne
或belongsTo
。两者的工作方式相同:
public function users() {
return $this->belongsTo('App\User', name_of_column_in_user_table, name_of_column_in_post_table);
}
然后,您可以通过$post->user->name
答案 1 :(得分:0)
在模型类中添加类似
的关系AcroForm
现在,在Post的每个实例的控制器或视图中,您可以使用: 通过实例
Class Posts Extends Eloquent{
protected $table = 'posts';
protected $fillable = array('title, image, text, user_id');
public $timestamps = false;
public function user()
{
return $this->belongsTo('App\User','user_id);
}
}
阅读有关多对一关系的文档,甚至是热切的加载。
答案 2 :(得分:0)
将模型之间的一对多关系定义为
class Posts extends Model
{
public function user(){
return $this->belongsTo('App\User');
}
// Whatever your code in Post model
}
class User extends Model
{
public function posts(){
return $this->hasMany('App\Post');
}
// Whatever your code in User model
}
如文档here中所述。现在,您可以获得帖子属于每个帖子的用户名。
将路线定义为
Route::get('/all-posts','PostController@getAllPosts')->name('get_all_posts');
编写控制器类以获取帖子
class PostController extends Controller
{
public function getAllPosts() {
$posts = Posts::all();
foreach ($posts as $post){
$username = $post->user->name;
//do something with $username
}
return view('all_posts')->with('detailed_posts');
//here the $detailed_posts can be defined in the 'do something' above
}
}
在这里你可以创建一个新的用户名数组并将其传递给视图
或
将PostController设置为,
class PostController extends Controller
{
public function getAllPosts() {
return view(all_posts);
}
}
然后设置 all_posts.blade.php 以使用刀片语法直接访问视图中的用户名,如下所示,
<html>
<div>
<h1>All Posts</h1>
@foreach (App\Post::all() as $post)
<span> Title : {{ $post->title}}</span>
<span> Username: {{$post->user->name}}</span>
.......
@endforeach
</div>
</html>