Laravel - Chaining hasOne->属于Eloquent中的关系

时间:2015-12-17 00:56:29

标签: laravel laravel-4 eloquent

我有以下架构

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

CoinTransactionPaperTransactionCoinTransaction.paper_transaction_id = PaperTransaction.id的关系为1对1。 PaperTransactionPaperProductPaperTransaction.paper_product_idPaperProduct.id之间存在多对一关系。

我可以使用

CoinTransaction模型中将PaperTransactionCoinTransaction连接在一起
    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');

}

但这不会返回与PaperTransactionPaperProduct相关的数据。

有没有办法将内置的Eloquent方法链接起来以获得我想要的东西?

1 个答案:

答案 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