如何在Laravel中建立一对一的雄辩关系?

时间:2019-06-27 09:36:40

标签: php laravel laravel-5 eloquent

我使用工匠命令创建了迁移

php artisan make:model Player -m

然后我的迁移如下:

public function up()
{
    Schema::create('players', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->unsignedBigInteger('user_id')->index();
        $table->foreign('user_id')->references('id')->on('users')->onDelete$
        $table->string('username');
        $table->timestamps();
    });
}

我跑步时没有留下错误

php artisan migrate

然后我更新了播放器模型App/Player.php,以包括可填充对象和一对一关系

class Player extends Model
{
    protected $fillable = ['user_id', 'username'];

    public function user()
    {
        return $this->belongsTo('App\User');
    }
}

然后我运行了Tinker工匠,当我尝试访问播放器模型时,我的输出是

>>> User::find(1)->player;
=> null

我想念什么?

3 个答案:

答案 0 :(得分:3)

您完成了反向连接吗?

这是相关代码

public function player() 
{
 return $this->hasOne(Player::class);  
}

答案 1 :(得分:0)

public function user()
{
    return $this->belongsTo('App\User','id' */foreign_key */ ,'user_id'*/owner_key*/);
}

我认为您忘记指定owner_id, 如果您未指定belongsTo的owner_key,则默认的belongsTo是模型ID。

答案 2 :(得分:0)

用户模型

public function player(){
    return $this->hasOne('App\Player');
}

玩家模型

public function user(){
    return $this->belongsTo('App\User');
}