将Laravel模型扩展到多个层是一个好习惯吗?

Mat*_*att 6 php laravel eloquent laravel-5.1

我在Laravel 5.1上重新开发一个项目

我意识到旧课程变得非常复杂,并且不再遵循"单一责任"原则.

所以我打算这样做:

<?php

class User extends Model
{

}

class SocialUser extends User
{

}
Run Code Online (Sandbox Code Playgroud)

所以我有几个问题,

  1. 是否有可能实现这一目标?
  2. 如果是,那么SocialUser类是否会链接回同一个数据库表,即User用户,是否会与User模型本身冲突?
  3. 这首先是一个很好的设计实践吗?或者我最好利用特质?

谢谢.

Mar*_*ean 3

你\xe2\x80\x99正在做的事情(扩展模型User)非常好,也是我在项目中使用的方法。

\n\n

例如,如果应用程序 I\xe2\x80\x99m 构建具有类似商店的功能,那么我可以创建一个Customer扩展User模型的模型,并包含订单相关关系:

\n\n\n\n
class Customer extends User\n{\n    public function orders()\n    {\n        return $this->hasMany(Order::class, \'customer_id\');\n    }\n\n    public function worth()\n    {\n        return $this->orders()->sum(function ($order) {\n            return $order->total();\n        });\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

在最近的一个项目中,我\xe2\x80\x99一直致力于电子邮件活动功能,并创建了一个Recipient类来扩展User模型以添加与活动相关的方法:

\n\n
class Recipient extends User\n{\n    public function campaigns()\n    {\n        return $this->belongsToMany(Campaign::class, \'recipient_id\');\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

因为这两个类都扩展了User模型,所以我获得了所有这些(和 Eloquent)方法:

\n\n
$customers = Customer::with(\'orders\')->get();\n
Run Code Online (Sandbox Code Playgroud)\n\n

只要您在基本模型中设置表,任何继承它的类都将User使用同一个表,即使模型的名称可能不同(即Customer、等)。RecipientStudent

\n