Красноречивое настраиваемое отношение hasMany (внешнее поле содержит текст, объединенный внешним ключом) - PullRequest
1 голос
/ 07 августа 2020

У меня есть эта структура базы данных. 2 таблицы: shipment_out, stock_move.

shipment_out имеет типичное поле целочисленного идентификатора первичного ключа.

stock_move имеет поле с именем shipment строкового типа. Это поле может иметь следующие значения:

"stock_shipment_out,1512",
"stock_shipment_in,65400",
"sale.line,358",
(...)

Дело в том, что таблица stock_move связана с несколькими таблицами, основанными на одном и том же поле, поэтому раньше она имела этот текст.

В этом случае Я хочу определить отношение: shipment_out hasMany stock_move. Итак, мне нужно присоединиться через stock_move.shipment имеет это значение: 'stock_shipment_out, {id}'.

Итак, как я могу определить эту взаимосвязь? Было бы что-то вроде:

public function stockMoves()
{
    return $this->hasMany(StockMove::class, 'shipment', 'stock.shipment.out,id');
}

Я могу достичь этих отношений с построителем запросов:

    $shipments = ShipmentOut
        ::join('public.stock_move', DB::raw('CONCAT(\'stock.shipment.out,\',public.stock_shipment_out.id)'), '=', 'stock_move.shipment')
        ->where('stock_shipment_out.id', '=', $shipmentOut);

Но мне тоже нужны отношения ...

...