如何使用Laravel获取属于外键的用户名?

时间:2017-08-29 20:44:02

标签: php laravel laravel-5.3

我希望使用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'));
  }

3 个答案:

答案 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);
}

在帖子表格中,您需要hasOnebelongsTo。两者的工作方式相同:

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>