Как сделать ассоциации на основе нескольких столбцов в Laravel

Я сталкиваюсь с проблемой создания ассоциаций на основе нескольких столбцов. Вот мой код и массив: —

$getdetails =  OrdersProduct::with('getattributes')->get();

И мой OrdersProduct.php Файл модели

public function getattributes(){
return $this->hasMany('App\ProductsColor','product_id','product_id');
}

Смотрите массив ниже: —

  Array
(
[0] => Array
(
[order_id] => 100015390
[product_id] => 1203
[product_size] => 12
[attributes] => Array
(
[0] => Array
(
[id] => 5748
[product_id] => 1203
[sku_website] => N7W84308-BLACK-10
[sku] => 8907613878595
[color] =>
[size] => 10
[price] => 2799
[stock] => 0
[ip_address] =>
[created_at] => 2018-08-07 16:15:36
[updated_at] => 2018-08-07 16:15:36
)

[1] => Array
(
[id] => 5749
[product_id] => 1203
[sku_website] => N7W84308-BLACK-12
[sku] => 8907613878601
[color] =>
[size] => 12
[price] => 2799
[stock] => 0
[ip_address] =>
[created_at] => 2018-08-07 16:15:37
[updated_at] => 2018-08-07 16:15:37
)

)

)
)

Мой ожидаемый выход ниже:-

Array
(
[0] => Array
(
[order_id] => 100015390
[product_id] => 1203
[product_size] => 12
[attributes] => Array
(

[0] => Array
(
[id] => 5749
[product_id] => 1203
[sku_website] => N7W84308-BLACK-12
[sku] => 8907613878601
[color] =>
[size] => 12
[price] => 2799
[stock] => 0
[ip_address] =>
[created_at] => 2018-08-07 16:15:37
[updated_at] => 2018-08-07 16:15:37
)

)

)
)

Я хочу сравнить с product_id и product_size в форме order_products, таблица products_color, имеющая product_id и размер. Спасибо

0

Решение

Compoships Добавлена ​​поддержка многостолбцовых отношений в Eloquent в Laravel 5.

Это позволяет вам определять отношения, используя следующий синтаксис:

public function b()
{
return $this->hasMany('B', ['key1', 'key2'], ['key1', 'key2']);
}

где столбцы должны совпадать.

0

Другие решения

попробуйте это в вашем OrdersProduct модель:

public function getattributes(){
return $this->hasMany('App\ProductsColor','product_id','product_id')->where('size',$this->product_size);
}
0

Наконец, сделали. Я добавил соединение в getattributes. Надеюсь, что это поможет другим в будущем:

$getdetails =  OrdersProduct::with(['getattributes'=>function($query){
$query->join('orders_products','orders_products.product_size','=','products_colors.size');
}])->get();
0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector