Eloquent hasOne关系返回null

时间:2018-06-02 19:44:11

标签: laravel eloquent

我有2个模型Admin和Subscription

模特Admin.php

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

Model Subscription.php

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

当我尝试获得订阅的付款人时,它返回null。 我正在收到这样的付款人。

在Controller.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

1 个答案:

答案 0 :(得分:1)

我不确定,因为您还没有显示您的迁移文件,但我认为您可能错误地设置了关系,您指定的是同一个外来文件。此外,如果主键被命名为' 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默认命名约定。