gpt4 book ai didi

php - 在 Laravel Eloquent 中访问数据透视表 "3rd Model relationship"

转载 作者:行者123 更新时间:2023-12-02 08:53:00 25 4
gpt4 key购买 nike

我有这种多对多关系 Laravel Eloquent 关系模型是:

class Email extends Model //actually represent the email account
{
protected $table = 'emails';

protected $fillable = [
'user_id',
'name',
];

public function messages() {
return $this->belongsToMany(Message::class)->withPivot('email_subtype_id');
}
}

class Message extends Model //actually represent the email message
{
protected $table = 'messages';

protected $fillable = [
'subject',
'body ',
];

public function emails() {
return $this->belongsToMany(Email::class)->withPivot('email_subtype_id');
}
}

class EmailMessage extends Pivot //actually represent the pivot table
{
protected $table = 'email_message';

protected $fillable = [
'email_id',
'message_id',
'email_subtype_id',
];

public function email() {
return $this->belongsTo(Email::class);
}

public function message() {
return $this->belongsTo(Message::class);
}

//this is the relation to a third model called EmailSubtype
//I want to include this relation to the Pivot when using it
public function subtype() {
return $this->belongsTo(EmailSubtype::class, 'email_subtype_id');
}
}

class EmailSubtype extends Model //3rd Model need to be included with Pivot
{
protected $table = 'email_subtypes';

protected $fillable = [
'name'
];

public function pivotEmailSubtype(){
return $this->hasMany(Pivot::class, 'email_subtype_id');
}
}

我可以在 Controller 中执行此操作:

    $email = Email::find(1);

foreach($email->messages as $message) {
$subtype_id = $message->pivot->email_subtype_id;
dd($subtype_id); //1 that relates to subtype: CC Email Account
//also I can get the name indirectly away from the relation as follows:
$subtypeName = EmailSubtype::find($subtype_id)->first()->name;
dd($subtypeName);
}

在这里,我仅通过直接枢轴关系获取 email_subtype_id,但必须做额外的工作才能获取相关的电子邮件子类型名称。

我需要从第三个模型EmailSubtype关系oneToMany [hasMany和belongsTo]中[直接]获取电子邮件子类型名称,该关系与具有EmailSubtype模型的Pivot模型相关,使用类似以下内容:

$message->pivot->subtypeName;

请帮忙!

最佳答案

使用这个:

public function messages() {
return $this->belongsToMany(Message::class)->withPivot('email_subtype_id')
->using(EmailMessage::class);
}

$message->pivot->subtype->name

关于php - 在 Laravel Eloquent 中访问数据透视表 "3rd Model relationship",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50661239/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com