【问题标题】:Laravel hasMany to a composite table return empty arrayLaravel hasMany 到复合表返回空数组
【发布时间】:2021-10-25 09:32:12
【问题描述】:

我有 3 个相互连接的表

account_receivables

  • account_receivable_id (PK)
  • ...

account_receivable_details

  • account_receivable_id (PK FK)
  • order_id (PK FK)

订单

  • order_id (PK)
  • ...

之后,我想建立这样的关系

class AccountReceivable extends Model
{
    protected $fillable = [
        'account_receivable_id','event_id','account_receivable_date','account_receivable_description','account_receivable_amount','xendit_id','xendit_status', 'xendit_expiry_date','account_receivable_percentage'
    ];

    protected $primaryKey = 'account_receivable_id';
    public $incrementing = false;

    public function accountReceivableDetail()
    {
            return $this->hasMany(AccountReceivableDetail::class, 'account_receivable_id', 'account_receivable_id');
    }
}

但是当我这样调用 AccountReceivable 时,它​​会返回一个空的 accountReceivableDetail 数组

public function getRiwayatById(Request $request, $id){
    $riwayat = AccountReceivable::where([
        'account_receivable_id' => $id
    ])->with('accountReceivableDetail')->first();
    
    return $riwayat;
}

你知道为什么当我实际上在表中有数据时它返回一个空数组吗?

【问题讨论】:

  • 检查关系中的外键和所有者键。
  • @KaleemShoukat 但我放了相同的密钥(密钥具有相同的名称)
  • @SanMargo 据我所知,如果一个 AccountReceivable 有很多 AccountReceivableDetails,那么 AccountReceivableDetails 中的 account_receivable_id 列不能有多个 id,因为该列是一个 PK。如果您想要这样的关系,请为 AccountReceivableDetail 创建一个 PK id,例如 account_receivable_detail_id。 CMIIW
  • @adhiskara 我认为它是由复合键调用的?所以我们有两列作为主键

标签: laravel eloquent relationship laravel-8 has-many


【解决方案1】:

您传递的所有者密钥错误更正的功能是:

 public function accountReceivableDetail()
 {
       return $this->hasMany(AccountReceivableDetail::class, 'account_receivable_id', 'id');
 }

如果 account_receivables 表和 account_receivable_details 表都具有一对一的关系,那么您应该将 hasMany() 替换为 hasOne()

【讨论】:

  • 对不起,如果我解释的不够全面,实际上一个AccountReceivable有很多AccountReceivableDetail(因为它包含连接到订单的详细信息)
  • 那只像我写的那样改函数。
  • 嗯,但是我已经重命名了密钥,所以两者都具有相同的名称(account_receivable_id)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-04-17
  • 2020-11-26
  • 1970-01-01
  • 1970-01-01
  • 2020-06-26
  • 2021-10-05
  • 1970-01-01
相关资源
最近更新 更多