У меня есть база данных со следующими таблицами и связями: счет-фактура, заказ и продукт, каждый фактор имеет несколько заказов, и каждый заказ указывает на продукт.
Модель счета-фактуры:
class Invoice extends Model
{
public function orders()
{
return $this->hasMany(Order::class);
}
}
Модель заказа:
class order extends Model
{
public function invoice()
{
return $this->belongsTo(Invoice::class);
}
public function product()
{
return $this->belongsTo('App\Product');
}
}
Модель продукта:
class product extends Model
{
public function orders()
{
return $this->belongsToMany(Order::class);
}
}
имя каждого заказа является внешним ключом для идентификатора продукта,
$table->unsignedBigInteger('name')->references('id')->on('products')->default(0);
в моем шаблоне я могу показать счет с такими заказами:
{{$invoice->title}}
{{$invoice->client_address}}
@foreach($invoice->orders as $order)
{{$order->name}}
${{$order->price}}
{{$order->qty}}
${{$order->qty * $order->price}}
@endforeach
с помощью этой функции:
public function show($id)
{
$invoice = Invoice::with('orders')->findOrFail($id);
return view('admin.invoice.show.main', compact('invoice'));
}
как показать имяпродукт в заказах записывается следующим образом:
{{$order->product->name}}
im, использующий before для одного цикла (например, product & category), но в этом примере мы имеем 3 отношения и используем компактный метод перед.
Моя таблица продуктов:
Schema::create('products', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('name');
$table->string('desc');
$table->string('price');
$table->string('image');
$table->string('count');
$table->string('status');
$table->unsignedBigInteger('category_id')->default(0);
$table->foreign('category_id')->references('id')->on('categories');
$table->timestamps();
});