You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何向Laravel Jetstream团队邀请邮件传递额外信息并正确调用自定义字段

问题解决步骤

  • 第一步:检查TeamInvitation邮件类的参数传递
    打开app/Mail/TeamInvitation.php,确认构造方法里将完整的$invitation实例传递给了视图,正确写法参考:
namespace App\Mail;

use App\Models\TeamInvitation as TeamInvitationModel;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;

class TeamInvitation extends Mailable
{
    use Queueable, SerializesModels;

    // 需保证$invitation为public属性,或在build方法中手动传给视图
    public function __construct(public TeamInvitationModel $invitation, public string $acceptUrl)
    {
    }

    public function build()
    {
        return $this->markdown('emails.team-invitation');
    }
}

如果此前仅单独抽取部分字段传给视图、没有传递完整的$invitation实例,模板中自然取不到existing_user字段。

  • 第二步:虚拟字段需追加到模型序列化列表
    如果existing_user不是数据库物理字段,是通过模型访问器计算生成的虚拟字段,需要在app/Models/TeamInvitation.php中加入$appends配置:
class TeamInvitation extends Model
{
    protected $appends = ['existing_user'];

    // 你的existing_user访问器逻辑示例
    public function getExistingUserAttribute()
    {
        return User::where('email', $this->email)->exists();
    }
}

未添加$appends的情况下,虚拟字段不会自动随模型实例传递给视图。

  • 第三步:重启队列进程
    如果你开启了队列发送邮件,修改代码后必须重启队列进程,否则旧的队列进程仍然运行修改前的代码,不会加载新增的字段逻辑:
php artisan queue:restart
  • 第四步:确认字段值已持久化
    如果你是在创建邀请记录后临时给$invitation赋值existing_user,没有调用save()方法存入数据库,发邮件时如果重新从数据库查询了邀请记录,临时赋值就会丢失,需要把existing_user存入数据库对应字段,或者发送邮件前直接将值传递给邮件类。

  • 第五步:确认修改的是生效模板
    如果你已经发布过Jetstream的视图文件,需要修改的是resources/views/vendor/jetstream/emails/team-invitation.blade.php,而非vendor/laravel/jetstream目录下的源文件,否则修改不会生效。

内容的提问来源于stack exchange,提问作者Andrew Fox

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 15:57:03