Php 属于返回舱
当我在没有默认键的情况下使用belongsTo时,它将无法连接 “我的用户”表中有Php 属于返回舱,php,laravel,Php,Laravel,当我在没有默认键的情况下使用belongsTo时,它将无法连接 “我的用户”表中有user\u id,这是表示该用户的随机和唯一字符串。我的URL表有user\u id和uri列,其中user\u id包含users表user\u id 在Url模型中,我有: public function user() { return $this->belongsTo('App\User','user_id','user_id'); } public function uri() {
user\u id
,这是表示该用户的随机和唯一字符串。我的URL表有user\u id
和uri
列,其中user\u id
包含users
表user\u 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;
}
在用户模型中,我有:
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\u id
连接的url
表中获取uri
但当我使用$url->user()
时,在laravel tinker中返回null或BelongsTo类
有人知道为什么吗?您的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();
我还有一个问题,我对avatar()方法使用了相同的方法,并且我尝试了你们所说的方法,除非我添加->first()。。。是不是因为我没有给阿凡达模型添加任何东西,我是否也需要添加阿凡达模型来建立关系?什么类型的关系?对于HasOne或BelongsTo,$model->relation应该等同于$model->relation()->first()。因此,如果模型是$user,
$user->avatar
,则在返回关系实例时,您将如何访问虚拟形象。没有必要在HasOne上使用first()
。我制作了一个新的应用程序,并在那里复制了我需要的所有东西,现在它可以像你说的那样工作了,我不知道为什么,但它可以:D