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