在Eloquent ORM中按用户ID获取发票

时间:2014-09-13 22:53:07

标签: php laravel orm eloquent

我想使用Eloquent ORM获取用户提出的所有发票。

目前,我正在通过invoice.id从联接表UsersInvoices中获取user.id,然后循环并根据ID从发票表中提取发票。

$user = Sentry::getUser();
$invoiceIDs = UsersInvoice::where('user_id', '=', $user->id)->get()->toArray();
$invoices = array();

foreach ($invoiceIDs as $key => $row) {
    array_push($invoices, Invoice::find($row['invoice_id']));
}



$this->data['title'] = 'Invoices';
$this->data['invoices'] = $invoices;


/** render the template */
App::render('@invoices/pending/index.twig', $this->data);

但我认为这可以/应该由ORM通过建模用户和发票之间的关系来处理。

看起来我应该能够通过简单地将user.id作为外键发布到发票表中来管理此like so - 也许我不需要连接表没有什么是需要存储的关系所特有的......?

2 个答案:

答案 0 :(得分:1)

注意:从手机发布。对不起,我不能这样放代码示例。

如果我理解正确,用户和发票之间的关系是

- User hasMany Invoice

- Invoice belongsTo User 

如果是这样,那么您需要通过定义获取中继数据的关系和方法(至少在用户模型中)来在Eloquent模型中进行设置。 Eloquent ORM期望发票表中有一个user_id字段。

然后你可以这样做:

$user = User::find($id);

$user->invoices(); //assuming you put an invoices method in the User model

或者:

$invoice = Invoice::find($id);

$invoice->user(); //assuming you setup a user method in the Invoice model

有关此处关系的更多信息:http://laravel.com/docs/eloquent#relationships

答案 1 :(得分:0)

您似乎已将user_idinvoice_id存储在单独的表格中。 只需将user_id保留在Invoices表中,然后使用单个查询来获取所有内容。 并且也不要将结果转换为数组。

foreach( $invoices as $inv ) {
    echo $inv->invoice_id;
}