使用Eloquent合并两个表(不使用DB :: Table)

时间:2019-11-29 13:24:49

标签: laravel eloquent

我有两个模型,Event和CoverEvent。封面事件只能链接到一个事件。 我能够使用SQL做到这一点。但是我想使用Eloquent以一种干净的方式使用它。 我该怎么办?

非常感谢!

这是SQL:

SELECT
    `cover_events`.`id`,
    `events`.`slug`,
    `events`.`title`,
    `events`.`subtitle`,
    `events`.`image`,
    `cover_events`.`columns`,
    `cover_events`.`right_align`,
    `cover_events`.`dark_text`,
    `cover_events`.`large`
FROM
    `cover_events`,
    `events`
WHERE
    `is_visible` LIKE 'true' AND
    `cover_events`.`event_id` = `events`.`id`

结果应为以下数组:

[
    [
        "id" => 1,
        "slug" => 'celine-dion-2020',
        "title" => 'Celine Dion',
        "subtitle" => '31 July 2020',
        "image" => env('APP_URL') . '/img/celine_dion.jpg',
        "columns" => 8,
        "right_align" => false,
        "dark_text" => true,
        "large" => true
    ],
    ...
]

3 个答案:

答案 0 :(得分:0)

您可以使用Laravel的集合merge()方法:

$events = Event::all()->merge(CoverEvent::all());

答案 1 :(得分:0)

雄辩的是,您只能使用关系来联接表。

CoverEvent类中使用关系

public function events()
{
    return $this->hasOne('App\Models\Event', 'id', 'event_id');
}

使用检索结果

$res = CoverEvent::where('is_visible','true')->get();

foreach($res as $cover_event)
{
  $cover_event->events->slug;  // data from event class
  $cover_event->columns;    // data from cover_event class
}

答案 2 :(得分:0)

例如,如果您的父模型是ManageClass,子模态是DaysClassDetails:-

class ManageClass extends Authenticatable
{   
   public function classType()
   {
      return $this->hasMany('App\DaysClassDetails','day_id','id');
   }
}

然后在控制器功能中输入此命令

ManageClass::with('classType')->get();