Laravel hasMany 到复合表返回空数组

Posted

技术标签:

【中文标题】Laravel hasMany 到复合表返回空数组【英文标题】:Laravel hasMany to a composite table return empty array 【发布时间】: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 我认为它是由复合键调用的?所以我们有两列作为主键 【参考方案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)

以上是关于Laravel hasMany 到复合表返回空数组的主要内容,如果未能解决你的问题,请参考以下文章

Laravel hasMany 是返回无结果

是否可以从 Laravel 中的 hasmany 关系中返回特定的索引元素?

Laravel同步hasMany与belongsTo数组

Laravel HasMany 查询最新入口并返回相关模型

Laravel Eloquent hasOne 返回空

如何在 Laravel 的 hasMany 关系中使用 groupBy