Я работаю с просмотром определенной базы заказов из идентификатора заказов. У меня нет проблем с отображением компании, связанной с заказами, но позже я понимаю, что мне нужно также отображать контактное лицо той компании, которая заказала, мне нужно отобразить это в поле зрения.
Покопавшись, я узнал, что могу использовать hasManyThrough, но не знаю, как на самом деле отображать данные. Я даже не уверен, сможет ли hasManyThrough дать то, что мне нужно.
Вот упрощенное отношение таблицы;
Companies Contacts Orders
id companies_id company_id
экран таблицы контактов
Таблица компаний
стол заказов
Модель компаний
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>
любое предложение о том, как я могу достичь этого? Огромное спасибо заранее!
Привет @AvinashRathod Я только что обновил свой вопрос. Благодарность!
Вы пробовали $orders->contact->cont_name ?
да, но он выдает ошибку «Попытка получить свойство не-объекта», поэтому в конечном итоге это делает «$ orders-> contact ['cont_name']»
Если я правильно вас понимаю, в вашей модельной компании вам нужно иметь функцию для hasMany заказов и hasMany контактов. В ваших контактах и модели ваших заказов есть функция для принадлежности компании.
В вашем дизайне вы хотите, чтобы у компании было только 1 контактное лицо или много? Итак, вам нужно будет получить этот контакт?
Компания может иметь несколько контактных лиц. и будет получать только последнее контактное лицо. Таким образом, сценарий заключается в том, что когда я открываю ЗАКАЗ, компания, назначенная для этого конкретного заказа, должна отображать его детали вместе с последним контактным лицом в этой компании.
Спасибо @LitoLozada, надеюсь, у вас есть ответ






Вам нужно 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, я очень ценю это.
Пожалуйста, опишите, скажите мне всю структуру таблиц