Laravel使用Inner Join关联表获取用户邮箱并发送邮件的实现问题
实现方案
推荐方式:基于Eloquent模型关联(ORM自动处理关联查询)
这是Laravel框架下的标准实现方式,无需手动编写JOIN语句,ORM会自动处理关联逻辑:
- 第一步:在Shipment模型中定义和User模型的关联关系
// app/Models/Shipment.php 文件中新增关联方法 public function user() { return $this->belongsTo(User::class, 'user_id'); }
- 第二步:修改原有发邮件的逻辑,通过关联属性获取用户邮箱
// add shipment to DB $newShipment = Shipment::create([ 'user_id' => $request->mailBoxNo, 'vendor'=> $request->vendor, 'weight'=> $request->weight, 'transitStatus'=> '1', 'isInvoiceReady'=>'0', 'trackingNumber'=> $trackingNumber, ]); // 通过关联属性直接获取对应用户的邮箱 Mail::to($newShipment->user->email)->send(new RecievedShipment(auth()->user(), $newShipment));
备选方式:手动编写INNER JOIN语句查询
如果你需要显式写JOIN语句实现,可以用以下代码:
// 新增 shipment 后执行关联查询 $userEmail = User::join('shipments', 'users.id', '=', 'shipments.user_id') ->where('shipments.id', $newShipment->id) ->value('users.email'); Mail::to($userEmail)->send(new RecievedShipment(auth()->user(), $newShipment));
注意:请提前确认User模型存储邮箱的字段名是否为
内容的提问来源于stack exchange,提问作者Paul Gordon
相关产品推荐
相关产品推荐

