Какое красноречивое отношение я должен использовать в своей множественной модели в Laravel

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

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

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

Companies                Contacts                 Orders
   id                  companies_id             company_id

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

Какое красноречивое отношение я должен использовать в своей множественной модели в Laravel

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

Какое красноречивое отношение я должен использовать в своей множественной модели в Laravel

стол заказов

Какое красноречивое отношение я должен использовать в своей множественной модели в Laravel

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

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>

любое предложение о том, как я могу достичь этого? Огромное спасибо заранее!

Пожалуйста, опишите, скажите мне всю структуру таблиц

Avinash Rathod 01.03.2019 12:09

Привет @AvinashRathod Я только что обновил свой вопрос. Благодарность!

SleepWalker 01.03.2019 12:18

Вы пробовали $orders->contact->cont_name ?

JoaoGRRR 01.03.2019 12:21

да, но он выдает ошибку «Попытка получить свойство не-объекта», поэтому в конечном итоге это делает «$ orders-> contact ['cont_name']»

SleepWalker 01.03.2019 12:39

Если я правильно вас понимаю, в вашей модельной компании вам нужно иметь функцию для hasMany заказов и hasMany контактов. В ваших контактах и ​​модели ваших заказов есть функция для принадлежности компании.

Ari 01.03.2019 13:10

В вашем дизайне вы хотите, чтобы у компании было только 1 контактное лицо или много? Итак, вам нужно будет получить этот контакт?

KeitelDOG 01.03.2019 21:57

Компания может иметь несколько контактных лиц. и будет получать только последнее контактное лицо. Таким образом, сценарий заключается в том, что когда я открываю ЗАКАЗ, компания, назначенная для этого конкретного заказа, должна отображать его детали вместе с последним контактным лицом в этой компании.

SleepWalker 01.03.2019 22:08

Спасибо @LitoLozada, надеюсь, у вас есть ответ

Avinash Rathod 02.03.2019 13:03
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
1
8
83
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

В твоем случае :

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>

Это потрясающе!!! Оно работает! Я действительно приму к сведению это @KeitelDOG, я очень ценю это.

SleepWalker 01.03.2019 22:26

Другие вопросы по теме