Я сталкиваюсь с проблемой создания ассоциаций на основе нескольких столбцов. Вот мой код и массив: —
$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 и размер. Спасибо
Compoships Добавлена поддержка многостолбцовых отношений в Eloquent в Laravel 5.
Это позволяет вам определять отношения, используя следующий синтаксис:
public function b()
{
return $this->hasMany('B', ['key1', 'key2'], ['key1', 'key2']);
}
где столбцы должны совпадать.
попробуйте это в вашем OrdersProduct модель:
public function getattributes(){
return $this->hasMany('App\ProductsColor','product_id','product_id')->where('size',$this->product_size);
}
Наконец, сделали. Я добавил соединение в getattributes. Надеюсь, что это поможет другим в будущем:
$getdetails = OrdersProduct::with(['getattributes'=>function($query){
$query->join('orders_products','orders_products.product_size','=','products_colors.size');
}])->get();