2015-12-17 43 views
0

属于关联关系我有以下模式Laravel - 链接hasOne->在锋

CoinTransaction 
    -id 
    -name 
    -paper_transaction_id 
PaperTransaction 
    -id 
    -name 
    -paper_product_id 
PaperProduct 
    -id 
    -name 

CoinTransactionPaperTransaction具有穿过CoinTransaction.paper_transaction_id = PaperTransaction.id 1对1的关系。 PaperTransactionPaperProduct通过PaperTransaction.paper_product_idPaperProduct.id具有多对一关系。

我可以在CoinTransaction模型中使用

public function paperTransactions(){ 

     return $this->hasOne('PaperTransaction', 'id', 'paper_transaction_id'); 

    } 

我试图连接连接CoinTransactionPaperTransaction共同所有三个一起使用

public function paperProducts(){ 

    $paperTransactions = $this->hasOne('PaperTransaction', 'id', 'paper_transaction_id'); 
    return $paperTransactions->getResults()->belongsTo('PaperProduct', 'paper_product_id'); 

} 

但这不返回有关PaperTransactionPaperProduct数据。

有没有办法链接内置的Eloquent方法来获得我在找的东西?

回答

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