Получение отношений отношений с помощью Eloquent - PullRequest
0 голосов
/ 03 апреля 2019

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


Модель счета-фактуры:

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();
});

Ответы [ 2 ]

0 голосов
/ 03 апреля 2019

Я думаю, что ваши отношения неправильные ... Каждый продукт может быть в течение нескольких заказов .. так:

Модель продукта:


class product extends Model
{
    public function orders()
    {
        return $this->belongsToMany('App\Order');
    }
}

Заказать модель:

class order extends Model
{
    public function product()
    {
        return $this->hasOne('App\Product');
    }   
}

право

Затем доступ с помощью:

$invoices = Invoice::with('orders.product')->get();
0 голосов
/ 03 апреля 2019

Попробуйте это

$invoice = Invoice::with('orders.product')->findOrFail($id);

Вы можете получить доступ, используя что-то подобное

@foreach($invoice->orders as $order)
..
 {{ $order->product->name }}
..
@endforeach
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...