我有以下架构
CoinTransaction
-id
-name
-paper_transaction_id
PaperTransaction
-id
-name
-paper_product_id
PaperProduct
-id
-name
CoinTransaction
和PaperTransaction
与CoinTransaction.paper_transaction_id
= PaperTransaction.id
的关系为1对1。 PaperTransaction
和PaperProduct
在PaperTransaction.paper_product_id
到PaperProduct.id
之间存在多对一关系。
我可以使用
在CoinTransaction
模型中将PaperTransaction
和CoinTransaction
连接在一起
public function paperTransactions(){
return $this->hasOne('PaperTransaction', 'id', 'paper_transaction_id');
}
我尝试使用
将所有三个连接在一起public function paperProducts(){
$paperTransactions = $this->hasOne('PaperTransaction', 'id', 'paper_transaction_id');
return $paperTransactions->getResults()->belongsTo('PaperProduct', 'paper_product_id');
}
但这不会返回与PaperTransaction
或PaperProduct
相关的数据。
有没有办法将内置的Eloquent方法链接起来以获得我想要的东西?
答案 0 :(得分:1)
您可以使用嵌套关系来执行此操作,例如,在CoinTransaction
模型中使用以下内容:
public function paperTransaction()
{
return $this->hasOne('PaperTransaction', 'paper_transaction_id');
}
在PaperTransaction
模型中,使用以下内容:
public function paperProduct()
{
return $this->belongsTo('PaperProduct', 'paper_product_id');
}
现在,您将能够使用以下内容查询关系:
$coinTransaction = CoinTransaction::with('paperTransaction.paperProduct')->get();
因此,如果您想访问相关模型,那么您可以这样做:
$paperTransaction = $coinTransaction->paperTransaction->toArray(); // or a field
$paperProduct = $coinTransaction->paperTransaction->paperProduct->toArray(); // or a field