2017-12-20 14 views
2

私はテーブル "item"、 "payment"、 "join_payment"を持っています。Laravelの2つのテーブルを組み合わせたモデル

商品にはidが、支払いにはidが含まれています。 join_paymentの行は、item_idpayment_idです。

支払いには、join_paymentテーブルに登録される多くのアイテムが含まれている場合があります。

私はこれらの項目でログを作りたいと私は現在コントローラでこれをやっている:

$log = Array(); 

$items = item::where("id",Auth::user()->id)->get(); 

foreach($items as $item){ 

$join_payment = join_payment::where("item_id",$item->id)->first(); 

if(!array_key_exists($join_payment->payment_id,$log){ 
    $log[$join_payment->payment_id] = payment::where("id",$join_payment->payment_id)->first(); 
} 
$log[$join_payment->payment_id][$item->id] = $item; 
} 

モデルでこれを引き出すための方法はありますか?

+0

この '$ log'変数にはどのような構造体が必要ですか? – Jeff

+0

@log関数の場合と同じですが、コントローラでループを実行するのではなく、モデルで実行されます。 – prgrm

答えて

3

私はこのために異質な関係を使用することをお勧めします。 https://laravel.com/docs/5.5/eloquent-relationships#many-to-many。あなたがテーブルitem_paymentに参加呼び出す場合、それはさらに簡単になります。

class Item extends Model { 
    public function payments(){ 
     return $this->belongsToMany(Payments::class) 
    } 
} 

class Payment extends Model { 
    public function items(){ 
     return $this->belongsToMany(Item::class) 
    } 
} 

class ItemPayment extends Model { 
    public function item(){ 
     return $this->belongsTo(Item::class) 
    } 
    public function payment(){ 
     return $this->belongsTo(Payment::class) 
    } 
} 

は、その後、あなたが方法の束に必要なデータにアクセスすることができます。あなたのクラスとテーブル名を変更するための

$items = Item::all(); 
foreach($items as $item){ 
    $item->payments; //returns all payments belonging to this item 
} 


$payments = Payment::all(); 
foreach($payments as $payment){ 
    $payment->items; //returns all items belonging to this payment 
} 


$itemPayments = ItemPayment::all(); 
foreach($itemPayments as $itemPayment){ 
    $itemPayment->item; //the item for this join 
    $itemPayment->payment; //the payment for this join 
} 

申し訳ありませんが、しかし、これらの規則は、この

public function payment() 
{ 
    return $this->hasOne('App\Payment','join_payment','payment_id','item_id'); 
} 
を使用して、あなたのアイテムのモデルにトンより簡単
1

Laravel

であなたの人生を行います

あなたのループチェックで

foreach($items as $item){ 
    dd($item->payment); 
} 
関連する問題