我一起去了两张桌子,查询工作正常。但是,发现很难找出哪一行属于哪个表。
我有一个Clients表和一个Projects表。理想情况下,在查询时我想添加一个名为type
的字段,并将其设置为客户端或项目。
我可以用MySQL做这个吗?
我正在使用laravel的querybuilder,这是我的查询。
DB::table('clients')
->select(['clients.id', 'clients.name'])
->where('clients.organisation_id', '=', $organisation->id)
->where('clients.name', 'LIKE', "%$query%")
->join('projects', function($join) use ($query){
$join->on('clients.id', '=', 'projects.client_id')
->select(['projects.id', 'projects.name'])
->where('projects.name', 'LIKE', "%$query%");
})
->get()
答案 0 :(得分:0)
Laravel doc提到您可以像在SQL中一样添加AS
子句,这样就可以了:
DB::table('clients')
->select(['clients.id AS client_id', 'clients.name AS client_name'])
->where('clients.organisation_id', '=', $organisation->id)
->where('clients.name', 'LIKE', "%$query%")
->join('projects', function($join) use ($query){
$join->on('clients.id', '=', 'projects.client_id')
->select(['projects.id AS project_id', 'projects.name AS project_name'])
->where('projects.name', 'LIKE', "%$query%");
})
->get()
这样,您最终会得到前缀为表名(client_id
vs project_id
)的字段,因此无法进行混淆。
答案 1 :(得分:0)
我建议您在数据库中创建Stored Procedure并在代码中调用它。在SP中,您可以使用if else
,这样您就可以检查它是客户端还是项目,然后设置一个可以输出的变量。
答案 2 :(得分:0)
尝试在同一查询中将选择组合在一起,而不是嵌套连接:
DB::table('clients')
->select([
'clients.id AS client_id',
'clients.name AS client_name',
'projects.id AS project_id',
'projects.name AS project_name'
])
->join('projects', 'clients.id', '=', 'projects.client_id')
->where('clients.organisation_id', '=', $organisation->id)
->where('clients.name', 'LIKE', "%$query%")
->where('projects.name', 'LIKE', "%$query%")
->get()