选择时设置不存在的字段

时间:2016-12-29 15:14:11

标签: php mysql laravel

我一起去了两张桌子,查询工作正常。但是,发现很难找出哪一行属于哪个表。

我有一个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()

3 个答案:

答案 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()