Php 如何在模型中执行本机查询?

Php 如何在模型中执行本机查询?,php,laravel,Php,Laravel,我需要在我的模型中定义复合外键。看起来它当前不受支持。因此,我尝试在模型中运行本机查询 我有两个表(vwalm,vwyfUserToItemAppings)都有两列 公司ID,站点代码 我想通过连接两个表中的两列来返回单行 这是我的模型 class Alarm extends Model { protected $table = 'vwAlarm'; protected $primaryKey = 'AlarmId'; .. public function Site()

我需要在我的模型中定义复合外键。看起来它当前不受支持。因此,我尝试在模型中运行本机查询

我有两个表(
vwalm,vwyfUserToItemAppings
)都有两列

公司ID,站点代码

我想通过连接两个表中的两列来返回单行

这是我的模型

class Alarm extends Model
{

    protected $table = 'vwAlarm';
    protected $primaryKey = 'AlarmId';

..

 public function Site()
    {
        $rec = \DB::table('vwAlarm')
            ->join('vwYfUserToSiteMappings', 'vwAlarm.SiteCode', '=', 'vwYfUserToSiteMappings.SiteCode')
            ->join('vwYfUserToSiteMappings','vwAlarm.CompanyId', '=', 'vwYfUserToSiteMappings.CompanyId')
            ->first();

        return $rec;
}
我越来越

 QueryException
SQLSTATE[42000]: [Microsoft][ODBC Driver 13 for SQL Server][SQL Server]The objects "vwYfUserToSiteMappings" and "vwYfUserToSiteMappings" in the FROM clause have the same exposed names. Use correlation names to distinguish them. (SQL: select top 1 * from [vwAlarm] inner join [vwYfUserToSiteMappings] on [vwAlarm].[SiteCode] = [vwYfUserToSiteMappings].[SiteCode] inner join [vwYfUserToSiteMappings] on [vwAlarm].[CompanyId] = [vwYfUserToSiteMappings].[CompanyId])

如何更正查询?

为表名设置别名,如下所示

$rec = \DB::table('vwAlarm')
            ->join('vwYfUserToSiteMappings AS vw1', 'vwAlarm.SiteCode', '=', 'vw1.SiteCode')
            ->join('vwYfUserToSiteMappings AS vw2','vwAlarm.CompanyId', '=', 'vw2.CompanyId')
            ->first();
你应该试试这个:

 $rec = \DB::table('vwAlarm')
        ->join('vwYfUserToSiteMappings AS vwSiteCode', 'vwSiteCode.SiteCode', '=', 'vwAlarm.SiteCode')
        ->join('vwYfUserToSiteMappings AS vwCompanyId','vwCompanyId.CompanyId', '=', 'vwAlarm.CompanyId')
        ->first();

如果您在某处编写了原始SQL查询。您可以使用
DB:raw()
直接执行它。阅读更多的感谢作品。但答案返回了不相关的站点详细信息。如何返回该报警模型的相关站点条目。我的意思是与//$this->belongsTo//等效。我的意思是,与AlarmTables primaryKey(AlarmId)相比,返回的站点详细信息是错误的。首先,尝试构建本机mysql查询,并在mysql数据库控制台中运行它,检查您是否获得了所需的结果。感谢它的工作。但答案返回了不相关的站点详细信息。如何返回该报警模型的相关站点条目。我的意思是相当于//$this->belongsTo//我的意思是返回的站点详细信息与AlarmTables primaryKey(AlarmId)相比是错误的@Ratha请提供更多详细信息如果您看到我的报警模型,我已经将primaryKey定义为“AlarmId”。我有两张桌子。vwallm和vwyfUserToItemAppings,我将从我的Web表单传递AlarmId,我希望返回属于该AlarmId的详细信息。一些详细信息在VWARM表中,一些详细信息在vwYfUserToSiteMappings表中。但这两个表都有SiteCode、ComapnyId列。所以我试着加入them@Ratha:好的,让我检查一下