Синтаксис отношения заказа продуктов Laravel 5: не уникальная таблица / псевдоним - PullRequest
0 голосов
/ 22 ноября 2018

Я работаю над приложениями, которые можно использовать для создания заказов на прайс-листы.
Вкратце : в ресторане есть прайс-лист, который можно обновить, следуя потоку, в котором он можетвведите новые цены.

В результате будет сформирован ценовой заказ.

Теперь я хочу, чтобы я извлек все категории с продуктами (без проблем), а затем я хочу установить отношение от продукта к PriceOrderProduct , чтобы я зналкогда продукт используется в заказе.

У меня есть это сейчас:

ProductCategory::with('products.orderProduct')->orderBy('order')->get() 

, что дает мне эту ошибку:

SQLSTATE[42000]: Syntax error or access violation: 1066 Not unique table/alias: 

полная ошибка:

SQLSTATE[42000]: Syntax error or access violation: 1066 Not unique table/alias: 'price_order_products' (SQL: select `price_order_products`.*, `price_order_products`.`product_id` as `pivot_product_id`, `price_order_products`.`id` as `pivot_id` from `price_order_products` inner join `price_order_products` on `price_order_products`.`id` = `price_order_products`.`id` where `price_order_products`.`product_id` in (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11))

Я искал эту ошибку, но не знаю, как исправить, может кто-нибудь помочь мне с этой проблемой?

Это мои таблицы и отношения:

(Я использую префикс price_ для своих таблиц)

Таблица: price_product_categories
- id
информация о категории и т. Д.

Модель: ProductCategory

public function products()
{
    return $this->hasMany(Product::class, 'product_category_id');
}

==========================
price_products
- id
- product_category_id
информация о продукте и т. Д.

Модель: Product

public function categories()
{
    return $this->belongsTo(ProductCategory::class, 'product_category_id');
}


public function orderProduct()
{
    return $this->belongsToMany(PriceOrderProduct::class, 'price_order_products', 'product_id', 'id');
}

==========================
Таблица: Price_orders
- id
- Restaurant_id
и т. д.

Модель: PriceOrder

public function products()
{
    return $this->hasMany(PriceOrderProduct::class, 'order_id');
}

==========================
Таблица price_order_products
- код заказа
- product_id
- цена
- product_info

Модель: PriceOrderProduct

public function orders()
{
    return $this->belongsTo(PriceOrder::class);
}

public function products()
{
    return $this->hasMany(Product::class, 'id', 'product_id');
}

1 Ответ

0 голосов
/ 22 ноября 2018
<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Product extends Model
{
    protected $table = 'price_products';

    public function categories()
    {
        return $this->belongsTo(ProductCategory::class, 'product_category_id');
    }

    public function orderProducts()
    {
        return $this->hasMany(PriceOrderProduct::class, 'product_id');
    }
}

Это будет работать для вашего запроса для желаемого результата.Получив отношение hasMany, а не владение ToMany.

...