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 到复合表返回空数组的主要内容,如果未能解决你的问题,请参考以下文章