我想使用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 - 也许我不需要连接表没有什么是需要存储的关系所特有的......?
答案 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_id
和invoice_id
存储在单独的表格中。
只需将user_id
保留在Invoices
表中,然后使用单个查询来获取所有内容。
并且也不要将结果转换为数组。
foreach( $invoices as $inv ) {
echo $inv->invoice_id;
}