Laravel родственники с методом синхронизации - PullRequest
0 голосов
/ 02 мая 2018

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

Выпуск

когда я пытаюсь сохранить свой продукт, я получаю эту ошибку

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'product_relative_id' in 'field list' (SQL: select `product_relative_id` from `product_relatives` where `product_id` = 46)

Коды

schema

public function up()
    {
        Schema::create('product_relatives', function (Blueprint $table) {
            $table->increments('id');
            $table->integer('product_id')->unsigned();
            $table->integer('relatives_id')->unsigned();
        });
        Schema::table('product_relatives', function (Blueprint $table) {
          $table->foreign('product_id')->references('id')->on('products');
          $table->foreign('relatives_id')->references('id')->on('products');
        });
    }

ProductRelative model

class ProductRelative extends Model
{
    public $timestamps = false;
    protected $table = 'product_relatives';

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


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

Product model

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

Store method

//load other products in create page
public function create()
    {
        $relatives = Product::all();
        return view('admin.products.create', compact('relatives'));
    }

//storing new product
 public function store(Request $request)
    {
        //validation etc.
        $product->save();
        $product->relatives()->sync($request->relatives, false);
        return redirect()->route('products.show',$product->id);
    }

blade

{{ Form::label('relatives', 'Relative Products') }}
<select data-placeholder="Select a Relative product" class="form-control tagsselector" id="relatives" name="relatives[]" multiple="multiple">
  @foreach($relatives as $relative)
    <option value="{{ $relative->id }}">{{ $relative->title }}</option>
  @endforeach
</select>

Вопрос

Почему я получаю ошибку и как ее решить?

UPDATE

Я изменил свой product model на код ниже, и теперь он работает.

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

Новый выпуск

Теперь, когда я могу сохранить мои сопутствующие товары, мне трудно вернуть их на мой взгляд.

Пока:

Я добавил этот код в функцию просмотра:

$relatives = ProductRelative::where('product_id', '=', $product->id)->get();

и добавил этот код на мой взгляд:

@foreach($relatives as $relative)
  {{$relative}}
@endforeach

с этим я могу получить результат как:

{"id":3,"product_id":36,"relatives_id":2} {"id":5,"product_id":36,"relatives_id":25} 

но когда я изменяю свой код лезвия на {{$relative->title}}, он ничего не возвращает.

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

1 Ответ

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

решаемые

Я изменил свои коды просмотра на код ниже, и теперь он работает:

$relatives = ProductRelative::where('product_id', '=', $product->id)
    ->join('products','products.id', '=', 'relatives_id')->get();

Надеюсь, это поможет.

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