Php 使用Laravel ORM的较大查询中的SQL Union 1列?

Php 使用Laravel ORM的较大查询中的SQL Union 1列?,php,mysql,sql,laravel,union,Php,Mysql,Sql,Laravel,Union,我目前正在存储多个不同对象的地址。因此,对于工作,公司等,有地址 我希望能够获得所有地址。*和作业的联合。作业_title和公司。公司_name为每个地址记录选择一个对象_name Address.php(模型) 地址的当前架构表: +-------------------+---------------------+------+-----+---------+----------------+ |字段|类型|空|键|默认|额外| +-------------------+---------

我目前正在存储多个不同对象的
地址
。因此,对于
工作
公司
等,有
地址

我希望能够获得所有
地址。*
作业的联合。作业_title
公司。公司_name
为每个
地址
记录选择一个
对象_name

Address.php(模型)

地址的当前架构
表:

+-------------------+---------------------+------+-----+---------+----------------+
|字段|类型|空|键|默认|额外|
+-------------------+---------------------+------+-----+---------+----------------+
|id | int(12)无符号| NO | PRI | NULL |自动增量|
|对象| id | int(12)| YES | MUL | 0 ||
|对象类型| tinyint(3)|是| 1 ||
|地址| varchar(255)|是| |空||
|软性|u删除| tinyint(3)未签名|是| 0 ||
|创建于|日期时间|否|空||
|更新时间为|日期时间|否|空||
+-------------------+---------------------+------+-----+---------+----------------+

作业的当前架构
表:

+-----------------+---------------------+------+-----+---------+----------------+
|字段|类型|空|键|默认|额外|
+-----------------+---------------------+------+-----+---------+----------------+
|id | int(12)无符号| NO | PRI | NULL |自动增量|
|公司id国际(12)|是| 0 ||
|职位名称| varchar(99)|是| |空||
|软性|u删除| tinyint(3)未签名|是| 0 ||
|创建于|日期时间|否|空||
|更新时间为|日期时间|否|空|
+-----------------+---------------------+------+-----+---------+----------------+

公司的当前架构
表:

+-----------------+---------------------+------+-----+---------+----------------+
|字段|类型|空|键|默认|额外|
+-----------------+---------------------+------+-----+---------+----------------+
|id | int(12)无符号| NO | PRI | NULL |自动增量|
|公司名称| varchar(99)|是| |空||
|软性|u删除| tinyint(3)未签名|是| 0 ||
|创建于|日期时间|否|空||
|更新时间为|日期时间|否|空|
+-----------------+---------------------+------+-----+---------+----------------+

我的问题是:我将如何创建联合并根据上述结构返回所需的数据?

我认为您所追求的。这是一个非常简化的模式,用于说明正在执行的操作:

addresses
id | objectId | objectType | address
1 | 1 | 1 | 4657
2 | 1 | 3 | 3465
3 | 2 | 4 | 4536
4 | 1 | 2 | 3098
5 | 2 | 1 | 5647
6 | 2 | 2 | 8989
7 | 1 | 4 | 4563
8 | 2 | 3 | 2345

companies
id | name
1 | 'Acme Anvils'
2 | 'McBarfles'
3 | 'Noke'
4 | 'Stab Mart'

jobs
id | companyId | title
1 | 4 | 'Fly Swatter'
2 | 3 | 'Palm Greaser'
3 | 2 | 'McBarfle Burger Tender'
4 | 1 | 'Shill'
假设
对象类型1
=
公司
对象类型2
=
作业

SELECT 
  'Company' AS objectType,
  c.name,
  a.address
FROM addresses a
INNER JOIN companies c 
  ON a.objectId = c.id
WHERE a.objectType = 1

UNION ALL

SELECT
  'Job' AS objectType,
  j.title,
  a.address
FROM addresses a
INNER JOIN jobs j
  ON a.objectId = j.id
WHERE a.objectType = 2
这将根据addresses表中的objectType将联接拆分为多个部分,然后将所有结果合并在一起,以获得地址和对象名称的最终列表:

objectType | name                   | address
Company    | Acme Anvils            | 4657
Company    | Noke                   | 3465
Company    | McBarfles              | 3098
Company    | Stab Mart              | 4563
Job        | Shill                  | 4536
Job        | Fly Swatter            | 5647
Job        | Palm Greaser           | 8989
Job        | McBarfle Burger Tender | 2345

请注意,对于
objectType

的每个可能值,您必须手动添加额外的查询,以便
UNION ALL
ed,这太好了,Paul-谢谢。我只想接受你的回答。我很感谢你抽出时间来做这件事。
objectType | name                   | address
Company    | Acme Anvils            | 4657
Company    | Noke                   | 3465
Company    | McBarfles              | 3098
Company    | Stab Mart              | 4563
Job        | Shill                  | 4536
Job        | Fly Swatter            | 5647
Job        | Palm Greaser           | 8989
Job        | McBarfle Burger Tender | 2345