Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何使用Laravel获取属于外键的用户名?_Php_Laravel_Laravel 5.3 - Fatal编程技术网

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

Php 如何使用Laravel获取属于外键的用户名?,php,laravel,laravel-5.3,Php,Laravel,Laravel 5.3,我想使用Laravel Eloquent获得外键所属的用户名 我有一个模型: Class Posts Extends Eloquent{ protected $table = 'posts'; protected $fillable = array('title, image, text, user_id'); public $timestamps = false; } 及 用户模型: class User extends Authenticatable { use Notifiab

我想使用Laravel Eloquent获得外键所属的用户名

我有一个模型:

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'));
  }

要设置用户->帖子的关系,可以使用
hasMany

public function posts(){
    return $this->hasMany('App\Post');
}
这将在posts表中查找任何
用户id
。如果名称不同,则可以将其作为第二个参数传入

public function posts(){
    return $this->hasMany('App\Post', name_of_column_in_post_table, name_of_column_in_user_table);
}
在posts表中,您需要
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

来获得用户信息,添加如下关系

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);
  }
}
现在,在每个Post实例的控制器或视图中,您可以使用: 以身作则

$post->user

阅读有关多对一关系甚至是即时加载的文档。

将模型之间的一对多关系定义为:

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
}
如文件中所述。现在,您可以获得每个帖子所属的用户的名称

将路线定义为

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
    }
}
在这里,您可以创建一个新的用户名数组并将其传递给视图

将后置控制器设置为

class PostController extends Controller
    {
        public function getAllPosts() {  
           return view(all_posts);
    }
}
然后将all_posts.blade.php设置为使用blade语法直接访问视图中的用户名,如下所示:

<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>

所有职位
@foreach(App\Post::all()作为$Post)
标题:{{$post->Title}
用户名:{{$post->user->name}
.......
@endforeach

您需要设置@aynber,我希望有一些这样的例子,因为laravel的文档是模糊的,这段代码是在用户模型中实现的??还是控制器@aynber请澄清。
posts
函数位于
User
模型中,
User
函数位于
posts
模型中。SQLSTATE[42S02]:未找到基表或视图:1146表“work.users”不存在(SQL:select*from
users
其中
users
id为空限制1)然后你的用户模型需要一些调整。你的users表的名称是什么?我在表中有用户的名称路由器正在使用,但这里的代码中没有显示。只有使用路由器,您才能进入控制器方法SqlState[42S02]:找不到基表或视图:1146表“工作。用户”不存在(SQL:select*from
users
其中
users
id为空限制1)您完成迁移了吗?您是否在数据库中创建了用户表?让我们看看.SQLSTATE[42S02]:找不到基表或视图:1146表“work.users”不存在(SQL:select*from
users
其中
users
id为空限制1)