У меня есть 3 разные таблицы в базе данных с именем productdetails , category & subcategorydetails , а также у меня есть 3 разных контроллера ProductdetailContoller , CategoryController & SubcategorydetailController соответственно. В настоящее время я работаю над 'view' SubcategorydetailContoller, который является subcategory.blade. php
`
@csrf
<div class="form-group">
<select name="productid">
<option value="select product">
@foreach ($productdetail as $row)
<option value="{{$row->ProductID}}">
{{$row->ProductType}}
</option>
@endforeach
</option>
</select>
<select name="categoryid">
<option value="select category">
@foreach ($category as $row)
<option value="{{$row->CategoryID}}">
{{$row->CategoryType}}
</option>
@endforeach
</option>
</select>
<input type="text" name="subcategory"/>
<input type="submit" value="add category"/>
</div>
</form>
</div>`
Теперь я хочу сделать динамически зависимое отбрасывание списки, но до этого я не смог отобразить данные второй таблицы во втором раскрывающемся списке.
Вот что я делаю в своем контроллере:
namespace App\Http\Controllers;
use App\productdetail;
use App\category;
use App\subcategorydetail;
use Illuminate\Http\Request;
class SubcategorydetailController extends Controller
{
public function index()
{
$productdetails=productdetail::all();
return view('subcategory')->with('productdetail',$productdetails);
//i wrote this in another class but i still didn't get the desired output
$category=category::all();
return view('subcategory')->with('category', $category);
}
public function create()
{
}
public function store(Request $request)
{
$data=new subcategorydetail();
$data->SubCatType=$request->subcategory;
$data->CategoryID=$request->categoryid;
$data->save();
return dd($data);
//return view('subcategory');
}
Обновление 1: теперь я получаю данные во втором раскрывающемся списке с помощью этого кода
public function index()
{
$productdetail=productdetail::all();
$category=category::all();
/*$category=category::where(DB::table('categories')
->join('productdetails','categories.ProductID','=','productdetails.ProductID')
->select('categories.CategoryType')
//->whereRaw('categories.ProductID="1"')
->get());*/
return view('subcategory')->with([
'productdetail'=>$productdetail,
'category' => $category,
]);
}
Теперь я не понимаю, где я делаю ошибку, когда присоединяюсь и устанавливаю логи c, что когда Я выбрал указанный продукт c в первом раскрывающемся списке, тогда во втором раскрывающемся списке будут отображаться только категории этого выбранного продукта. ??
Обновление 2:
public function index(Request $request)
{
$productdetail=productdetail::all();
$data=new productdetail();
$data=new productdetail();
$data->ProductID=$request->productid;
$category=category::where(DB::table('categories')
->join('productdetails','categories.ProductID','=','productdetails.ProductID')
->select('categories.CategoryType')
->whereRaw('categories.ProductID='.$data.'')
->get());
return view('subcategory')->with([
'productdetail'=>$productdetail,
'category' => $category,
]);
}
Приведенный выше код показывает эта ошибка:
SQLSTATE [42000]: синтаксическая ошибка или нарушение прав доступа: 1064 В синтаксисе SQL имеется ошибка; проверьте руководство, соответствующее вашей версии сервера MariaDB, чтобы узнать правильный синтаксис для использования рядом с '"ProductID"?} "в строке 1 (SQL: выберите categories
. CategoryType
из categories
внутреннее объединение productdetails
в categories
. ProductID
= productdetails
. ProductID
где Categories.ProductID = {"ProductID": null})