首页 文章

属于归班

提问于
浏览
-1

当我使用belongsTo没有默认密钥时,它将无法连接..

我的users表有user_id,它是一些rand和唯一的字符串,用于显示该用户 . 我的urls表有user_id和uri列,其中user_id包含用户表user_id .

在Url模型中,我有:

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

在用户模型中我有:

public function uri() {
        return $this->hasOne('App\Url', 'user_id', 'user_id')->first()->uri;
}

通过使用$ user-> uri(),我从与user_id连接的urls表中获取uri .

但是当我使用$ url-> user()时,我会在laravel tinker中返回null或BelongsTo类 .

谁知道为什么?

1 回答

  • 2

    您的 User::uri() 方法不是关系方法 .

    您正在使用它内部的关系方法,但是您要查询第一个结果并返回uri属性 .

    您的 Url::user() 方法是一种关系方法,因为您实际上正在返回一个关系(BelongsTo)实例 . 雄辩的关系使用如下:

    // To get a related entity on a BelongsTo relationship, you access it as a property:
    $url->user
    
    // To query a relationship, you use it as a method:
    $url->user()->where(...)->first();
    

相关问题