【发布时间】:2021-08-31 14:17:05
【问题描述】:
我有一个客户表、一个client_contacts 表和一个contact_type 表。客户端是 1:m 与 client_contacts,client_contacts 是 1:1 与 contact_type。
这个想法是客户可以有一个主要联系人、一个帐单联系人等。
我正在尝试同时获取给定的客户和联系人,以及联系人类型的描述。所以在 SQL 中应该是这样的:
SELECT c.*, cc.*, ct.contact_type_description
FROM client c
JOIN client_contacts cc ON c.id = cc.client_id
JOIN contact_types ct ON cc.contact_type_id = ct.id
WHERE c.id = 1
根据我的阅读,我需要为此使用HasManyThrough?
我是这样设置的:
客户端模型
class Client extends Model
{
use HasFactory;
protected $fillable = [
'client_name',
'address',
'city',
'state',
'zip',
];
public function contacts()
{
return $this->hasMany(Contact::class);
}
public function contactTypes()
{
return $this->hasManyThrough(ContactType::class, Contact::class);
}
}
联系模特
class Contact extends Model
{
use HasFactory;
public function contactType()
{
return $this->hasOne(ContactType::class);
}
}
联系人类型模型
class ContactType extends Model
{
use HasFactory;
protected $guarded = [];
public function contact()
{
return $this->belongsTo(Contact::class);
}
}
在我的控制器中,我现在只是尝试 dd() 数据。
public function edit(Client $client)
{
$contacts = $client->contacts;
$ct = $client->contactTypes();
dd($ct);
return Inertia::render('Clients/Edit', [
'client' => [
'id' => $client->id,
'client_name' => $client->client_name,
'address' => $client->address,
'city' => $client->city,
'state' => $client->state,
'zip' => $client->zip,
],
'contacts' => $contacts
]);
}
这会产生一个结果,但我没有在结果中看到 ContactType 数据。我做错了什么?
【问题讨论】:
标签: php laravel eloquent laravel-8