У меня есть три angular Отношения "многие ко многим" между моделями "Продукт", "Категория" и "Атрибут".
- Продукт имеет отношение "ToMany" с категорией "ProductCategory"
- Категория "ProductCategory" имеет отношение "ToMany" с атрибутом
- Атрибут имеет отношение ToMany к Product
Модели выглядят следующим образом:
- Product. php
class Product extends Model
{
public function productCategories()
{
return $this->belongsToMany(\App\Models\ProductCategory::class);
}
public function attributes()
{
return $this->belongsToMany(\App\Models\Attribute::class)->withPivot('attribute_value');
}
}
ProductCategory. php
class ProductCategory extends Model
{
public function products()
{
return $this->belongsToMany(\App\Models\Product::class, 'product_product_category');
}
}
Атрибут. php
class Attribute extends Model
{
public function productCategories()
{
return $this->belongsToMany(\App\Models\ProductCategory::class);
}
public function products()
{
return $this->belongsToMany(\App\Models\Product::class)->withPivot('attribute_value');
}
}
веб. php
Route::post('product/{id}/get_attributes', 'ProductController@get_attributes');
ProductController. php
public function get_attributes($id, Request $request){
// Some code goes here... <- This is where I am stuck!!!
// Here, we have a product id and the array of product category ids through ajax post request.
}
Ajax запрос:
<script type="text/javascript">
$('#product_categories').change(function(){
var product_category_id = [];
product_category_id = $(this).val();
var product_id = {{$product->id}};
// alert({{url('product/"+product_id+"/get_attributes')}});
if(product_id != '')
{
$.ajax({
url: "{{url('product/'.$product->id.'/get_attributes')}}",
method: 'POST',
data: {product_category_id:product_category_id,"_token": "{{ csrf_token() }}"},
success: function(data) {
$("#attributes").html('');
alert(data);
$("#attributes").html(data);
},
error: function(data){
alert("Failure");
console.log(data);
}
});
}
else
{
$("#attributes").html('');
}
});
</script>
Я хочу написать код в функции get_attributes, который будет возвращать атрибуты:
- , которые относятся к выбранным категориям
- Кроме того, которые относятся к продукту с идентификатором
$id
в URL-адресе запроса или веб-маршруте.
На приведенном ниже снимке экрана представлена небольшая визуализация того, чего я хочу достичь , Щелкните здесь, чтобы увидеть снимок экрана
Как показано на приведенном выше снимке экрана, я хочу заполнить таблицу атрибутов и значения атрибутов в соответствии с категориями, выбранными в «Multi-select категории продуктов», с помощью запроса ajax , Значения атрибутов также должны быть заполнены, когда это возможно. (Значения атрибутов хранятся в сводной таблице attribute_product).
Я потратил 2 дня, делая это по-разному. Если кто-нибудь скажет мне, как я могу достичь желаемого результата, тогда я буду очень благодарен.