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

Laravel 使用Eloquent(不使用DB::Table)合并两个表,laravel,eloquent,Laravel,Eloquent,我有两个模型,Event和CoverEvent。封面事件只能链接到一个事件。 我可以用SQL来做这件事。但我想用一种干净的方式,用雄辩的语言。 我该怎么做 非常感谢 下面是SQL: SELECT `cover_events`.`id`, `events`.`slug`, `events`.`title`, `events`.`subtitle`, `events`.`image`, `cover_events`.`columns`, `co

我有两个模型,Event和CoverEvent。封面事件只能链接到一个事件。 我可以用SQL来做这件事。但我想用一种干净的方式,用雄辩的语言。 我该怎么做

非常感谢

下面是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
    ],
    ...
]

您可以使用Laravel的收集方法:


在eloquent中,只能使用关系连接表

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
}

例如,如果父模型为ManageClass,子模型为DaysClassDetails:-

class ManageClass extends Authenticatable
{   
   public function classType()
   {
      return $this->hasMany('App\DaysClassDetails','day_id','id');
   }
}
并在控制器功能中输入此命令

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

谢谢你的帮助!我尝试了你的代码,但它正在数组中创建一个数组。我希望将事件数组作为主数组的一部分,而不是数组中的一个数组。我怎么能这样做?再次感谢,我很感激!如果不使用关系,则无法在Elount中联接表。如果要在单个数组中生成结果,则必须使用查询生成器。
ManageClass::with('classType')->get();