Какое красноречивое отношение я должен использовать в моей множественной модели в Laravel - PullRequest
0 голосов
/ 01 марта 2019

Я работаю с просмотром определенной базы заказов по номеру заказа.У меня нет проблем с отображением компании, связанной с заказами, но позже я понимаю, что мне нужно также отобразить контактное лицо из той компании, которая заказала Мне нужно отобразить это в поле зрения.

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

Вот упрощенное отношение к таблице;

Companies                Contacts                 Orders
   id                  companies_id             company_id

экран таблицы контактов

enter image description here

Таблица компаний

enter image description here

таблица заказов

enter image description here

Модель компании

public function orders()
{
    return $this->hasManyThrough(
        Orders::class, 
        Contacts::class, 
        'companies_id', 
        'company_id', 
        'id', 
        'id' 
    );
}    

Модель заказов

public function companies()
{
   return $this->hasOne('App\Companies', 'id','company_id');
}

public function contact()
{
   return $this->hasOne('App\Contacts', 'id','companies_id');
}

Я пытаюсь отобразить подобные данные

<div class="col-xs-6">
    <strong>TO:</strong>
    <h4>{{ $orders->companies->comp_name }}</h4> //this is ok
    <p>{{ $orders->companies->comp_address }}</p> //this is ok
    <p>{{ $orders->contact['cont_name'] }}</p> //this should be the contact person from that company
</div>

Есть ли какие-либо предложения о том, как этого добиться?заранее большое спасибо!

1 Ответ

0 голосов
/ 02 марта 2019

Вам нужно hasManyThrough в стиле Каскад 1-ко-многим-ко-многим.Как у художника есть много альбомов, в которых есть много песен, так что у исполнителя есть много песен в альбомах (Artist-> Albums-> Songs).

В вашем случае:

1- в компании есть одинили несколько контактов, допустим, вы ограничите его до 1 с помощью кодов бизнес-логики

2- Компания имеет много заказов, и заказ принадлежит компании

3- Контакт принадлежитКомпания

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

ОБНОВЛЕНИЕ -----

Как вы указали в комментарии, компания может иметь несколько контактов,затем вы можете определить дополнительное hasMany отношение к контакту.


в модели компаний

<?php
// Companies model

public function contact()
{
   return $this->hasOne('App\Contacts', 'companies_id');
}

public function contacts()
{
   return $this->hasMany('App\Contacts', 'companies_id');
}

public function orders()
{
   return $this->hasMany('App\Orders', 'company_id');
}

в модели контакта

<?php
// Contacts model
// Keep it singular since it's only one Company
public function company()
{
   return $this->belongsTo('App\Companies', 'companies_id');
}

в модели заказа

<?php
// Orders model
// Keep it singular since it's only one Company
public function company()
{
   return $this->belongsTo('App\Companies', 'company_id');
}

И, наконец, в режиме Blade

<div class="col-xs-6">
    <strong>TO:</strong>
    <h4>{{ $orders->company->comp_name }}</h4> //this is ok
    <p>{{ $orders->company->comp_address }}</p> //this is ok
    <p>{{ $orders->company->contact->cont_name }}</p> //this should be ok
</div>
...