我很难让一个非常嵌套的关系在laravel中正常工作.

被通缉的行为如下:,

I select an event by ID 和 i want to see which persons are subscribed to it.

这就是有效的查询!

SELECT persons.id, 
       persons.firstname, 
       persons.lastname, 
       event_scores.score 
FROM   events 
       JOIN cities 
         ON cities.id = events.city_id 
       JOIN companies 
         ON cities.id = companies.city_id 
       JOIN persons 
         ON companies.id = persons.company_id 
       JOIN event_scores 
         ON event_scores.person_id = persons.id 
WHERE  event_scores.event_id = 1 
GROUP  BY persons.id 

These are my relations

事件模型

class Event extends Eloquent
{
    protected $table = 'events';

    public function city()
    {
        return $this->belongsTo('City');
    }
}

城市模型

class City extends Eloquent
{
    protected $table = 'cities';

    public function companies()
    {
        return $this->hasMany('Company');
    }

    public function event()
    {
        return $this->hasMany('Event');
    }
}

公司模式

class Company extends Eloquent {

    protected $table = 'companies';

    public function persons()
    {
        return $this->hasMany('Person');
    }

    public function city()
    {
        return $this->belongsTo('City');
    }
}

人物模型

class Person extends Eloquent
{
    protected $table = 'persons';

    public function company()
    {
        return $this->belongsTo('Company');
    }

    public function eventscore()
    {
        return $this->belongsToMany('Event', 'event_scores', 'person_id', 'event_id')
            ->withPivot('score')
            ->withTimestamps();
    }
}

What I have tried

return Event::with('city')->with('company')->get();

return Event::with('city')
    ->whereHas('companies', function($query) use ($company_id){
        $query->where('company_id', $company_id);
    })->get();

还有很多其他的可能性,我真的被困在这个问题上了.在laravel中实现这种嵌套关系链接有那么困难吗?

谢谢

推荐答案

return Event::with('city.companies.persons')->get();

如果只想从persons表中 Select 某些字段,请使用以下选项:

return Event::with(['city.companies.persons' => function ($query) {
    $query->select('id', '...');
}])->get();

Mysql相关问答推荐

将具有多个结果的表连接为新列?

MySQL问题难以将文本字符串转换为正确的日期格式

找出同一表中列A中的每个值在列B中出现的次数

根据SQL中的平均范围对学生进行排名

在停靠容器中备份和恢复MySQL数据库时出现Unicode字符问题

从insert语句获取新生成的虚拟UUID

奇怪的MySQL SELECT循环;但不是\G

如何在sql中包含0作为计数?

MySQL match against给出奇怪的结果

我在连接到 mysql 的 node js 中收到错误消息发送到客户端后无法设置标头

MYSQL 8.0 - 从 INFORMATION_SCHEMA.COLUMNS 获取表列重新调整其他不相关的列

如何获取每日登录用户数?

mysql insert into select join - 通过连接表将值从一列复制到另一表

一次更新mysql中的多个列

如何创建一个判断行是否存在的mysql查询-如果存在我想插入一条新记录,否则增加一个值

从 SQL 中的左连接和内连接中减go 计数

MySQL - 使一对值唯一

mysqli_fetch_array() 期望参数 1 为 mysqli_result,布尔值

外键可以引用非唯一索引吗?

从 MySQL 中的日、月、年字段创建日期