“with()”的条件关系

时间:2018-03-29 08:56:42

标签: laravel laravel-5

我有一个名为transactions的表和另一个名为cars的表,其结构如下:

transactions

| id  | date | amount | status | user_added |
| --- | ---- | ------ | ------ | ---------- |

cars

| id  | plate | specs | buy_transaction  | sell_transaction  |
| --- | ----- | ----- | ---------------- | ----------------- |

汽车总是buy_transaction但不总是sell_transaction,情况是我试图获取所有交易(可能与汽车相关或与汽车无关)并包含CAR与交易天气有关,它是出售或购买的,所以我需要使关系有条件但我无法做到这一点。

$journal = Transaction::with(
    ['user'=> function($query) { 
        $query->select('id', 'name');
     },
     'income',
     'outcome',
     'car'
    ])->where('date', '>=', $fromDate)->where('date', '<=', $toDate);

这是模态类:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Transaction extends Model
{

    public function income()
    {
        //.....
    }

    public function outcome()
    {
        //.....
    }

    public function user()
    {
        return $this->belongsTo('App\User', 'user_added', 'id');
    }

    // *** problem starts here ***

    public function car()
    {
        if (transaction status == 1) {

        return $this->belongsTo('App\Car', 'id', 'sell_transaction');

        }
        else if (transaction status == 2) {

        return $this->belongsTo('App\Car', 'id', 'buy_transaction');

        }
    }

}

我需要坚持使用该查询结构,因为查询命令更长,我正在加入并包含其他表格,我希望我能以某种方式使car() belongsTo关系成为条件。

我遵循了一些类似的情况like this,但它对我不起作用。

谢谢。

1 个答案:

答案 0 :(得分:0)

您发布的链接有答案

public function soldCar()
{
   return $this->belongsTo('App\Car', 'id', 'sell_transaction');
}
public function boughtCar()
{
   return $this->belongsTo('App\Car', 'id', 'buy_transaction');
}
public function scopeCar($query)
{   
    return $query->when($this->type === '1',function($q){
       return $q->with('soldCar');
    })
    ->when($this->type === '2',function($q){
       return $q->with('boughtCar');
    });

}

编辑:此外,这似乎是多边关系的一个主要示例,如此处所述https://laravel.com/docs/5.5/eloquent-relationships#polymorphic-relations