Я пытаюсь выполнить этот запрос с помощью Laravel Query Builder. Я думаю, что запрос правильный, потому что когда я запускаю запрос в MySQL Workbench, запрос выполняется и я получаю ожидаемые результаты. Я знаю, что мы можем написать необработанный запрос с помощью построителя запросов laravel, но он открыт для внедрения SQLуязвимости.Поэтому я пытаюсь идти вперед без необработанных запросов.
Это запрос
SELECT invoice.InvNo,customer.RouteCode,customer.CustomerCode,rootplan_product.RouteplanCode,invoice.Status
FROM rootplan_product
INNER JOIN
customer ON customer.RouteCode = rootplan_product.RouteCode
AND
customer.CustomerCode = rootplan_product.customercode
INNER JOIN
invoice ON invoice.CustomerCode = customer.CustomerCode
WHERE
rootplan_product.RouteCode='MO-A' AND invoice.Status IN ('PENDING','ACTIVE')
ORDER BY invoice.Status desc
Я сделал каждую таблицу моделью и использую в контроллере вот так.Поскольку имена таблиц отличаются от соглашений об именах.Я добавил protected $table = 'correct_table_name';
в каждую модель.
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use \App\Route;
use \App\Customer;
use \App\Invoice;
use \App\Rootplan_Product;
Это функция контроллера
public function retrieveRouteCodeData(Request $request){
try {
$RouteCode = $request->RouteCode;
$retrievedData = DB::table('rootplan_product')
->join('customer', function($join){
$join->on('customer.RouteCode', '=', 'rootplan_product.RouteCode');
$join->on(DB::raw('(customer.CustomerCode = rootplan_product.CustomerCode)'));
})
->join('invoice', 'invoice.CustomerCode', '=', 'customer.CustomerCode')
->select('invoice.InvNo', 'customer.RouteCode', 'customer.CustomerCode', 'rootplan_product.RouteplanCode', 'invoice.Status')
->where('rootplan_product.RouteCode', $RouteCode)
->orderBy('invoice.Status','desc')
->get();
return response()->json(['msg'=>'Updated Successfully', 'result'=>$retrievedData, 'success'=>true]);
}
catch (\Exception $e) {
return response()->json(['msg'=>$e->getMessage()]);
}
}
В консоли появляется эта ошибка
"SQLSTATE [42S22]: столбец не найден: 1054Неизвестный столбец '' in 'в предложении' (SQL: выберите invoice
. InvNo
, customer
. RouteCode
, customer
. CustomerCode
, rootplan_product
. RouteplanCode
, invoice
. Status
из rootplan_product
внутреннее объединение customer
в customer
. RouteCode
= rootplan_product
. RouteCode
и (customer.CustomerCode = rootplan_product.CustomerCode) = `` внутреннее объединение invoice
в invoice
.CustomerCode
= customer
. CustomerCode
, где rootplan_product
. RouteCode
= MO-A заказ на invoice
. Status
desc) "
Я понимаю, что запрос сложныйи любая помощь будет оценена!