2016-10-04 44 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