例如我有一张桌子商店。 所以我有ORM模型Shop。
我需要一个向店主发送电子邮件的功能。:
function sendEmail($body){
}
现在我想要这项工作:
Shop::find(1)->sendEmail('Email body to one shop')
Shop::all()->sendEmail('Send bulk email')
sendEmail函数放在哪里?在ORM模型中?
什么是最好的?
答案 0 :(得分:1)
这应该是邮件服务。理想地致力于界面。
类似的东西:
$shop = Shop::where('postcode', '=', 44444)->first();
AppMailer::send($shop);
AppMailer::bulk(Shop::where('postcode', '=', 44444));
服务方法,服务类
// Single send
function send(IMailable $mailable)
{
// do mail stuff here
// the mail service doesn't even need to care if its
// eloquent or not
$this->doSomething($mailable->email);
}
// Bulk send
function bulk(Collection $mailables)
{
foreach ($mailables as $mailable)
{
if($mailable instanceof IMailable)
{
$this->send($mailable);
}
}
}
可以在您的IMailer界面类中使用
interface IMailable {
public function getEmailAddress();
public function getName();
}
在某处购物
class Shop extends Eloquent implements IMailable {
// bla bla your normal attributes for a shop
// add some special attributes to statisfy the mailable contract
public function getEmailAddress()
{
return $this->email;
}
public function getName()
{
return $this->streetNumber . ' ' . $this->streetName;
}
}
关于这一切的好处是,以后如果你想发送电子邮件Cafes
以及Shops
,你只需要确保你的Cafe类实现IMailable
并且你笑了通往商店的路,以及咖啡馆。