SQLSTATE [42000]: синтаксическая ошибка или нарушение доступа: 1066 Не уникальная таблица / псевдоним в laravel - PullRequest
0 голосов
/ 07 мая 2018

Я синхронизировал данные, в которых некоторые продукты я прикрепляю к другому как связанные, метод сохранения и синхронизации работает просто отлично, моя проблема в части редактирования .

Я получаю эту ошибку при попытке загрузить страницу редактирования моего продукта:

SQLSTATE[42000]: Syntax error or access violation: 1066 Not unique table/alias: 'product_relatives' (SQL: select `product_relatives`.*, `product_relatives`.`product_id` as `pivot_product_id`, `product_relatives`.`relatives_id` as `pivot_relatives_id` from `product_relatives` inner join `product_relatives` on `product_relatives`.`id` = `product_relatives`.`relatives_id` where `product_relatives`.`product_id` = 49)

Коды

this is my edit function

public function edit($id)
    {
      $product = Product::findOrFail($id);
      //another synced data and how i retrieve them
      $suboptions = Suboption::all();
      $suboptions2 = array();
      foreach($suboptions as $suboption) {
        $suboptions2[$suboption->id] = $suboption->title;
      }

      // my issue comes from here
      $relatives = ProductRelative::all();
      $relatives2 = array();
      foreach($relatives as $relative) {
        $relatives2[$relative->id] = $relative->title;
      }

      return view('admin.products.edit', compact('product','suboptions2', 'relatives2'));
    }

blade code

{{ Form::label('relatives', 'Relative Products') }}

{{Form::select('relatives[]', $relatives2, null, ['class' => 'form-control tagsselector', 'multiple' => 'multiple'])}}

product model

public function relatives()
  {
    return $this->belongsToMany(ProductRelative::class, 'product_relatives', 'product_id', 'relatives_id');
  }

relatives model

public $timestamps = false;
    protected $table = 'product_relatives';

    public $fillable = ['product_id', 'relatives_id'];


    public function products()
    {
        return $this->belongsToMany(Product::class);
    }

есть идеи как это исправить?

1 Ответ

0 голосов
/ 07 мая 2018

Сбой оператора SQL имеет смысл. Он пытается соединить таблицу product_relatives с таблицей product_relatives. Таким образом, выдаваемая ошибка Not unique table or alias имеет смысл, основываясь только на запросе.

Следующий шаг - попытаться подумать о причинах, по которым Laravel может быть здесь замешан.

Поскольку вы пытаетесь создать ownToMany с той же моделью, вам понадобятся эти таблицы

  1. Продукты
  2. product_relatives

Теперь вам нужно создать только одну модель:

  1. Продукт

Модель вашего продукта должна содержать:

public function relatives()
{
    return $this->belongsToMany(Product::class, 'product_relative', 'product_id', 'relative_id');
}

Ваша модель ProductRelative должна содержать:

public function product()
{
    return $this->belongsTo(Product::class, 'product_id');
}
public function relative()
{
    return $this->belongsTo(Product::class, 'relatives_id');
}

Проблема возникла из-за того, что вы использовали модель ProductRelative в качестве сводной таблицы и попытались создать внутри нее отношение BelongsToMany, используя то же имя таблицы, что и сама модель.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...