2014-09-13 1 views
0

사용자가 Eloquent ORM을 사용하여 제기 한 모든 송장을 가져오고 싶습니다.Eloquent ORM에서 사용자 ID로 송장 가져 오기

지금은 user.id에 의해 조인 테이블 UsersInvoices에서 invoice.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 ORM은 invoices 테이블에 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

당신의 예제'User :: relation()'은 잘못되었습니다 - 당신은 그렇게 할 수 없습니다. –

+0

고마워요, Jarek! 더 정확한 의사 코드를 수정했습니다. – freshyseth

0

user_idinvoice_id을 별도의 테이블에 저장 한 것으로 보입니다. Invoices 테이블에 user_id을 그대로두고 단일 쿼리를 사용하여 모두를 가져 오면됩니다. 또한 결과를 배열로 변환하지 마십시오.

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