Запрос соединения Laravel с двумя столбцами в одной таблице - PullRequest
0 голосов
/ 10 января 2019

Мой код

$result=DB::table('receipts')
      ->join('dealer_m','receipts.ToDealerID','dealer_m.DealerID')
      ->join('dealer_m','receipts.FromDealerID','dealer_m.DealerID')
      ->join('product_m','receipts.ProductID','product_m.ProductID')->get();

таблица квитанций

Id | FromDealerId  | ToDealerId  |  ProductId
---+---------------+-------------+------------
1         1              2            1

2         1              3            1

3         3              1            1

Стол дилер_м

DealerId | DealerName    
---------+-----------
  1         Dealer One
  2         Dealer Two
  3         Dealer Three

Таблица product_m

ProductId | ProductName
----------+-----------
    1       Product One
    2       Product Two

Ожидаемый результат

Id | FromDealerId  | ToDealerId  |  ProductId | FromDealerName | ToDealerName | ProductName
---+---------------+-------------+------------+----------------+--------------+------------


 1         1              2            1         Dealer One      Dealer Two  Product One

 2         1              3            1         Dealer One      Dealer Three  Product One

 3         3              1            1         Dealer Three    Dealer One   Product One

Когда я запускаю свой код, появляется ошибка

SQLSTATE [42000]: синтаксическая ошибка или нарушение доступа: 1066 Не уникально table / alias: 'dealer_m' (SQL: выбрать '' из внутреннего соединения 'квитанций' 'dealer_m' в 'квитанциях'. 'ToDealerID' = `dealer_m '.' DealerID 'внутренний присоединяйтесь к дилеру на квитанции. FromDealerID = дилер, дилер внутреннее соединение 'product_m' в 'квитанциях'. 'ProductID' = 'Product_m'. 'ProductID')

Как это решить ???

Спасибо

Ответы [ 2 ]

0 голосов
/ 10 января 2019

Вы должны попробовать это:

$result=DB::table('receipts')
      ->join('dealer_m as dealer_id','receipts.ToDealerID','dealer_m.DealerID')
      ->join('dealer_m as dealer_f_id','receipts.FromDealerID','dealer_m.DealerID')
      ->join('dealer_m as product_p_id','receipts.ProductID','product_m.ProductID')->get();
0 голосов
/ 10 января 2019

Попробуйте:

$results=DB::table('receipts')
      ->select('receipts.*','dealer_m1.DealerName as ToDealer','dealer_m2.DealerName as FromDealer','product_m.ProductName')
      ->join('dealer_m as dealer1','receipts.ToDealerID','dealer_m.DealerID')
      ->join('dealer_m as dealer2','receipts.FromDealerID','dealer_m.DealerID')
      ->join('product_m','receipts.ProductID','product_m.ProductID')->get();

Вам просто нужно дать каждому объединенному столу псевдоним

Теперь в вашем клинке:

@foreach ($results as $result)
  <tr>
    <td>{{$result->Id}}</td>
    <td>{{$result->FromDealerId}}</td>
    <td>{{$result->ToDealerId}}</td>
    <td>{{$result->ProductId}}</td>
    <td>{{$result->FromDealer}}</td>
    <td>{{$result->ToDealer}}</td>
    <td>{{$result->ProductName}}</td>
  </tr>
@endforeach

Конечно, если вы когда-нибудь застряли на том, что вызывать в своем блейде, просто распечатайте нашу коллекцию, чтобы найти значения key => или выполните dd ($ results); в контроллере, чтобы осмотреть его, прежде чем он попадет в поле зрения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...