laravel Eloquent有一个关系返回null

w80xi6nr  于 2022-12-14  发布在  其他
关注(0)|答案(3)|浏览(149)

我有2个模型管理和订阅
模型管理. php

public function subscription() {
    return $this->hasOne('App\Subscription','admin_id','id'); 
}

模型订阅. php

public function payer() {
     return $this->belongsTo('App\Admin','admin_id','id');
}

当我试图获得订阅的付款人时,它返回null。我得到的付款人是这样的。
在控制器. php中

$subscriptions=Subscription::all();

foreach ($subscriptions as $subscription) {
    dd($subscription->payer);
}

请给予我一个解决方案。我尝试和改变一切,它仍然没有工作。
这是我的迁移
订阅表

id  int(10) unsigned Auto Increment  
subscription_type   varchar(191) NULL    
expiry_date timestamp NULL   
status  varchar(191) [required]      
admin_id    varchar(191)     
created_at  timestamp NULL   
updated_at  timestamp NULL

管理表

id  int(10) unsigned Auto Increment  
name    varchar(191)     
email   varchar(191)     
password    varchar(191)     
remember_token  varchar(100) NULL    
created_at  timestamp NULL   
updated_at  timestamp NULL
6yjfywim

6yjfywim1#

我不确定,因为你还没有显示你的迁移文件,但我认为你可能设置错误的关系,你指定了相同的外部。而且,如果主键名为'id',你不需要指定它。所以也许这工作:

模型管理员

public function subscription()
{
  // asumes foreign key is called admin_id
  return $this->hasOne('App\Subscription');
}

模型订阅

public function payer()
{
  // asumes foreign key is called subscription_id
  return $this->belongsTo('App\Admin');
}
  • 更新,如果您已按建议命名表,则无需指定任何键,因为您遵循laravel默认命名约定。*
kqlmhetl

kqlmhetl2#

如果你不使用数字作为id,拉腊维尔会投出一个适合的球。如果你使用字符串,你必须告诉它。
如果您有任何问题,请与我们联系.

a0x5cqrl

a0x5cqrl3#

为hasOne编写方法名必须超过3个字符。

相关问题