2016-10-04 45 views
0

我想写一个数据库查询与Laravel 5.3的Has Many Through optionLaravel - 有许多通过

我的数据库表是奠定列如下:

http://sqlfiddle.com/#!9/a9c9af

的表是:

公司 company_offers 提供

在我的模型I H AVE以下设置:

public function offers() 
    { 
     return $this->hasManyThrough(
      'App\Offers', 'App\CompanyOffers', 
      'company_offer_id', 'offer_id' 
     ); 
    } 

当我试图运行下面的代码行:

return $this->whereHas('offers', function($query) use ($offer_id) 
     { 
      return $query->whereIn('offer_id', $offer_id); 
     }); 

我得到的错误:

完整性约束违规:1052列 'offer_id'在哪里条款 含糊不清

怎么办我开始纠正这个问题,让这段关系正确吗?

我需要获得报价标题&报价图标为我的前端视图。

希望这是有道理的,有人可以帮助我。

感谢

回答

0

“列offer_id“在where子句暧昧”基本上意味着SQL查询处理的几个表,它不知道哪个表offer_id指的是:

例如,查询可以做这样

select offers.* from offers 
left join another_table on another_table.field = offers.field 
where offer_id = ? 

注意offer_id在上表中可以指一列offersanother_table东西。

您应该如何纠正错误是在表名offer_id的前面。这样的事情:

return $this->whereHas('offers', function($query) use ($offer_id) { 
    return $query->whereIn('other_table.offer_id', $offer_id); 
}); 
+0

谢谢@Jonathon查询现在正在运行,但返回空数据。 (即使应该有结果)希望得到SQL的输出,以便能够从那里调试它。 – StuBlackett

+0

@StuBlackett您可以[侦听查询事件](https://laravel.com/docs/5.3/database#listening-for-query-events)。 – Doom5

+0

@StuBlackett在执行任何查询和'\ DB :: getQueryLog()'之前,您还可以使用'\ DB :: enableQueryLog()'的组合来查看执行的内容:) – Jonathon