Laravel Eloquent: динамически моделируемая таблица получает данные - PullRequest
0 голосов
/ 21 декабря 2018

Попытка создать модель Eloquent для нескольких разных таблиц.Ниже приведен мой список таблиц:

  • транзакция
  • транзакция201806
  • транзакция201807
  • транзакция201808

Модель транзакции:

class Transaction extends Model
{
    protected $table = 'transaction';

    public function __construct($attributes = [], $date = null) {
        parent::__construct($attributes);
        $date = $date ?: "";
        $this->setTable("transaction$date");
    }

    public function Receipt(){
        return $this->belongsTo('App\Receipt');
    }
}

Модель квитанции:

class Receipt extends Model
{
    protected $table = 'receipt';

    public function transaction($date = null){
        $transModel = new Transaction([], $date);
        return $this->hasMany($transModel);
    }  
}

Контроллер:

$date = $request->date;
$newTableName = "transaction".$date;
$transModel = new Transaction([], $date);
$query = $transModel->selectRaw($newTableName.'.*, SUM('.$newTableName.'.amount) as amount')
            ->where($newTableName.'.user_id', $user->id)
            ->with('receipt.transaction')
            ->paginate($paginate);

Когда нет ввода, $ date = null, result-> data как ниже (это то, что я хочу):

{
    "id": 2005533,
    "user_id": 12,
    "receipt_id": "1002767",
    "amount": "10.00000000",
    "type": 2,
    "created_at": "2018-12-18 11:57:22",
    "receipt": {
        "id": 1002767,
        "remark": null,
        "created_at": "2018-12-18 11:57:22",
        "transaction": [
            {
                "id": 2005532,
                "user_id": 12,
                "receipt_id": "1002767",
                "amount": "-10.00000000",
                "type": 1,
                "created_at": "2018-12-18 11:57:22",
            },
            {
                "id": 2005533,
                "user_id": 12,
                "receipt_id": "1002767",
                "amount": "10.00000000",
                "type": 2,
                "created_at": "2018-12-18 11:57:22",
            }
        ]
    }
},

Когда ввод 201806, $ date = "201806", результат:

{
    "id": 152,
    "user_id": 12,
    "receipt_id": "100",
    "amount": "10.00000000",
    "type": 2,
    "created_at": "2018-06-10 11:57:22",
    "receipt": {
        "id": 100,
        "remark": null,
        "created_at": "2018-06-10 11:57:22",
        "transaction": []
    }
},

Проблема, с которой я сталкиваюсь сейчас, заключается в том, когда $ dateне нуль, в результате я получаю отсутствующую транзакцию для получения.Могу ли я знать, что я могу сделать, чтобы он знал, на какую таблицу он должен указывать при загрузке нескольких отношений?

Ожидаемый результат для $ date! = Null:

{
    "id": 152,
    "user_id": 12,
    "receipt_id": "100",
    "amount": "10.00000000",
    "type": 2,
    "created_at": "2018-06-10 11:57:22",
    "receipt": {
        "id": 100,
        "remark": null,
        "created_at": "2018-06-10 11:57:22",
        "transaction": [
            {
                "id": 2005532,
                "user_id": 12,
                "receipt_id": "100",
                "amount": "-10.00000000",
                "type": 1,
                "created_at": "2018-06-10 11:57:22",
            },
            {
                "id": 152,
                "user_id": 12,
                "receipt_id": "100",
                "amount": "10.00000000",
                "type": 2,
                "created_at": "2018-06-10 11:57:22",
            }
        ]
    }
},
...