php - 如何从多个对象构建流/源?

标签 php laravel laravel-5

我想在应用程序的首页上构建一个通知流。现在,我有新闻、 session 和演示的模型。我想将这些元素组合成一个对象,也许称为事件,这样我就可以获取最近的 5 个事件并将它们显示在首页上。输出将类似于:

News Article: Submissions open starting April 1
Presentatiion: How to do stuff, the PDF
Meeting: April 15, Foo High School Gymnasium

这些对象都实现了一个接口(interface),该接口(interface)需要 getTitle、getBody 和 getCreationDate,因此每个对象都可以使用这些函数。

我不想简单地合并集合,因为这会变得困惑。有什么方法可以将这些对象组合成一个对象吗?

最佳答案

我要反对 @Tadas 所说的,并说 Eloquent 可能仍然是最好的选择,使用 polymorphism 。这样,您的所有事件都可以位于一个表中,可以轻松选择,然后您的模型可以保存您需要的任何特殊信息。

将表格设置如下:

event
    title
    body
    creation_date
    eventable_id
    eventable_type

news
    some_other_field1

meeting
    some_other_field2

还有你的模型:

class Event extends Model
{
    /**
     * Get all of the owning imageable models.
     */
    public function eventable()
    {
        return $this->morphTo();
    }
}

class News extends Model
{
    /**
     * Get all of the staff member's photos.
     */
    public function events()
    {
        return $this->morphMany('App\Event', 'eventable');
    }
}

class Meeting extends Model
{
    /**
     * Get all of the product's photos.
     */
    public function events()
    {
        return $this->morphMany('App\Event', 'eventable');
    }
}

此方法可以通过几种不同的方式帮助您:

  1. 获取事件非常简单。想要接下来的 5 场事件吗? Event::where('event_date', '=>', new DateTime('today'))->orderBy('event_date', 'asc')->take(5);
  2. 以可重复使用的方式轻松获取不同型号即将举行的事件:

    News:whereHas('events', function($query) {
        $query->where('event_date', '=>', new DateTime('today'))->orderBy('event_date', 'asc')->take(5);
    })->get();
    
  3. 您还可以获得继承的好处,您可以在所有模型中拥有不同的字段,但基 Event模型可以保存您的所有通用信息。当您需要来自事件对象的特定于模型的信息时,您只需调用 $event->eventable-><whatever field you need>

  4. 无需原始查询。只需继续使用正常的 Laravel 语法即可。

关于php - 如何从多个对象构建流/源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37164151/

相关文章:

php - 使用 jQuery AJAX 从 Laravel 5 中的联系表单发送电子邮件

laravel - 自定义文件名,同时保留扩展名

php - 使用临时表 [mssql] 时,存储过程没有结果

php - 混合来自 2 个不同表的数据库结果

laravel - Vuex 无法使用 npm 安装并给出错误

html - 减少内容和页脚之间的空间

php - Laravel 从集合中获取值

php - 在 WooCommerce 中按产品 ID 显示带有短代码的产品价格

php - 为什么POST请求返回404

PHP : How to lock an active directory user account?