0

这是我的结构,我想在laravel中连接这两个表,怎么做?

帖子表:

public function up()
{
    Schema::create('post', function (Blueprint $table) {
        $table->increments('post_id');
        $table->string('post');
        $table->integer('time');
        $table->string('host');
        $table->integer('vote_up');
        $table->integer('vote_down');
        $table->foreign('id_fk')->references('id')->on('users');
        $table->timestamps();
    });
}

用户表:

public function up()
{
    Schema::create('users', function (Blueprint $table) {
        $table->increments('id');
        $table->string('name');
        $table->date('dob');
        $table->string('email')->unique();
        $table->string('password');
        $table->rememberToken();
        $table->timestamps();
    });
}
4

2 回答 2

2

我认为您只是在迁移中粘贴,但您确实需要在您的表之前users创建您的表。我会改变posts

$table->foreign('id_fk')->references('id')->on('users');

$table->foreign('user_id')->references('id')->on('users');

因为 Laravel 可以推断外键:

Eloquent 通过检查关系方法的名称并在方法名称后加上 _id 来确定默认的外键名称。但是,如果 Post 模型上的外键不是 user_id,您可以将自定义键名称作为第二个参数传递给 belongsTo 方法

然后您的模型中需要的只是以下内容:

class Post extends Model
{
    /**
     * Get the user that owns the post.
     */
    public function user()
    {
        return $this->belongsTo('App\User');
        // if you want to keep your current structure:
        // return $this->belongsTo('App\User', 'id_fk', 'id);
    }
}

class User extends Model
{
    /**
     * Get the post for a user.
     */
    public function posts()
    {
        return $this->hasMany('App\Post');
        // if you want to keep your current structure:
        // return $this->belongsTo('App\Post', 'id_fk');
    }
}

您可以在此处阅读有关建立关系的更多信息。

于 2017-05-15T16:54:52.103 回答
0

在您的帖子表中,您应该有:

$table->integer('user_id')->unsigned();

在您的用户模型上:

public function posts(){
return $this->hasMany(Post::class);
}

在您的 Post 模型上:

public function user(){
return $this->belongsTo(User::class);
}
于 2017-05-15T16:51:23.437 回答