当前位置: 首页 > 知识库问答 >
问题:

访问数据透视表"第三模型关系"在Laravel雄辩

阚小云
2023-03-14

我有这种多对多的关系Laravel雄辩的关系模型是:

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');
    }
}

我可以在控制器中执行此操作:

    $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,但必须做额外的工作来获得相关的电子邮件子类型名称。

我需要获得电子邮件子类型名称[直接]从第三个模型电子邮件子类型关系oneTo很多[有很多和属性到]涉及到枢轴模型与电子邮件子类型模型使用类似的东西:

$message->pivot->subtypeName;

请帮忙!

共有1个答案

皇甫心思
2023-03-14
public function messages() {
   return $this->belongsToMany(Message::class)->withPivot('email_subtype_id') 
       ->using(EmailMessage::class);
}

$message->pivot->subtype->name
 类似资料:
  • 我有三张桌子: 类别(id、名称) 类别赛(类别赛id,锦标赛id)-- Category是可用类别列表Category_Tornament是管理员配置的类别列表Category_Tornament用户是用户已注册的类别 要获得锦标赛中的所有类别,我可以使用以下工具轻松完成: 在竞赛模型中定义归属关系 我不知道如何定义与上一个表的关系。 我需要的是用户单击几个类别,我可以运行如下操作: 我应该在哪

  • 雄辩的关系如下: 商店属于许多商店时代(属于许多) 数据透视表(store\u day\u time\u stores)有一个名为“user\u id”的键,storedaytimes表有一个名为“date”的字段。 我想根据给定的“用户id(来自数据透视表)”和“开始”和“结束”日期(来自storedaytime表)过滤“storedaytimes”中的记录。 我现在的问题是 它产生了一个看起来

  • 我正在使用Laravel5.1进行CMS开发。我有一个简单的帖子结构,用户和用户都可以喜欢帖子。 帖子和用户有多对多关系,并使用数据透视表来表示关系。 职位模型有 用户模型有 我想列出用户的最新活动。例如。 Username1喜欢Post2 Username5喜欢Post9 用户名30喜欢Post25 我知道我必须像这样编写sql查询- 上面的查询工作正常,但有没有办法使用laravel雄辩?

  • 我正在组装一个简单的购物车系统,使用Laravel和Vue.js,来出售照片。每张照片都有不同的尺寸,每个尺寸的价格都不同。 我有以下表格: 我正在使用Vue.js对我的购物车控制器进行API调用,以操纵购物车。当用户单击“添加到篮子”按钮时,它会传递照片id和大小id。当然,我想从数据库而不是客户端获取所选项目的价格,以防止任何无礼行为,这自然意味着查询pivot表。 我的问题是,使用传递给控制

  • 我想不出如何雄辩地处理这件事。我有一个多对多的关系,需要分配给它一对一的关系。 下面是我设计的最简单形式的基本数据库结构: 每个帐户都属于多个代理。 每个代理人都有许多账户。 每个Account_Agent(多对多数据透视表)属于收费。 我如何在雄辩的模型中定义第三种关系? 我希望能够获得如下(或类似)的“账户代理”费用: 谢谢,希望我的问题很清楚。

  • 我试图通过使用Laravel Eloquent获得数据,但我无法访问。无论何时尝试,它都显示尝试获取非对象的属性“name” 我有两个模型。类别和文章。类别有许多文章。以下是模型: 类别模型 文章模式 物品管理员 查看刀片(admin.article.pending) 在这里的刀片,我不能访问类别通过雄辩的属于功能,我没有得到背后的原因得到的消息: ErrorException(E_ERROR)试