Laravel 5,7 многие ко многим с обычным именем таблицы - PullRequest
0 голосов
/ 05 января 2019

Товар Модель

class goods extends Model
{
  protected $table = "goods";
  public function sales(){
    return $this->belongsToMany('App\sales', 'sales_details', 'goods', 'sales');
  }
}

Модель продаж

class sales extends Model
{
  protected $table = "sales";
  public function goods(){
    return $this->belongsToMany('App\goods','sales_details','sales','goods');
  }
}

Я также делаю эту модель, но я не знаю, нужна ли она мне когда-либо

class salesDetail extends Model
    {
      protected $table = "sales_details";
    }

мой контроллер

public function test()
    {
      $goods = goods::all();
      return view('test',compact('goods'));
    }

my test.blade.php

@foreach($goods as $data)
    <li><strong>{{ $data->name }}</strong> - {{ $data->company->kind }} {{ $data->company->name }}</li>
    <p>{{ $goods->sales }}</p>
  @endforeach

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

goods
-id
-name

sales
-id
-date

sales_details
-goods
-sales
-qty
-price

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

sales -id
sales - date
goods - name
sales_details - qty
sales_details - price

это должен быть результат this should be the result

1 Ответ

0 голосов
/ 05 января 2019

В вашем цикле @foreach вы пытаетесь получить доступ к sales в коллекции товаров, а не к экземпляру в цикле. Кроме того, поскольку отношение sales() - это ownToMany (многие-ко-многим), вы получите коллекцию, а не один экземпляр, поэтому вам также понадобится просмотреть их, например,

@foreach($goods as $data)
    <li>
        <strong>{{ $data->name }}</strong> - {{ $data->company->kind }} {{ $data->company->name }}

        @foreach($data->sales as $sale)
            <p>{{ $sale->date }} - {{ $sale->pivot->qty }}</p>
        @endforeach
    </li>
@endforeach

Чтобы получить доступ к данным из вашей сводной таблицы, сначала нужно попросить Laravel включить эту информацию в отношения:

public function sales()
{
    return $this->belongsToMany('App\sales', 'sales_details', 'goods', 'sales')
        ->withPivot('qty', 'price');
}

Вы также должны добавить метод withPivot к отношению good() в классе sales.

Тогда вы сможете получить доступ к информации из свойства pivot. Это происходит в примере выше с {{ $sale->pivot->qty }}.

Многие ко многим документам (прокрутите вниз до Получение столбцов промежуточной таблицы )

...