2016-06-08 66 views
1

我正在使用Eloquent的->merge()method。如果僅通過->get()獲得收藏,它看起來效果很好。當從一列中提取數據時,雄辯合併()未按預期合併

但是,當我添加select('some_column')時,得到的集合有意想不到的結果。

例如,我得到以下三個集合:

$collection_1 = Model_1 ::select('column')->whereNotNull('column2')->distinct()->get(); 
$collection_2 = Model_2 ::select('column')->whereNotNull('column2')->distinct()->get(); 
$collection_3 = Model_3 ::select('column')->whereNotNull('column2')->distinct()->get(); 

$options = $collection_1->merge($collection_2)->merge($collection_3); 

在選項,我只能得到一個值,而不是所有的價值預期。

對於$collection_1->count()我得到10條記錄。 對於$collection_2->count()我得到8條記錄。 對於$collection_3->count()我得到12條記錄。

但在生成的(和使用merge())我只得到一個記錄!

我錯過了什麼?

可能的解決方法

我用->lists()代替->get()爲表示in this answer

所以這就是我的了:

$collection_1 = Model_1 ::whereNotNull('column2')->distinct()->lists('column'); 
$collection_2 = Model_2 ::whereNotNull('column2')->distinct()->lists('column'); 
$collection_3 = Model_3 ::whereNotNull('column2')->distinct()->lists('column'); 

$options = $collection_1->merge($collection_2)->merge($collection_3); 
$options = $options->unique()->sort(); 

,這把招到目前爲止☻

+0

在第一種情況下(只有1條記錄的情況下),你可以用'dd()'輸出嗎? – Vucko

回答

0

合併()雄辯收集的方法使用模型的主鍵模型實例來區分。由於您僅獲取不是主鍵的單個列,因此主鍵爲空,而收集事物的所有對象只是同一對象的副本。

將主鍵列添加到傳遞給select()的列的列表中,以便主鍵值可用並且合併可以正常工作。