2016-02-21 17 views
1

作爲laravel的新手,我希望我能夠深入到這個相當令人惱火的問題的底部!Laravel 5.2插入選擇使用動態內容

我有一個由2個用戶類型,買家和提供商組成的小應用程序,usertype->買家可以爲他們需要的服務請求免費估算,供應商可以手動創建此估算或根據他們爲特定價格範圍設置了默認值,例如,如果用戶(買方)請求對200英鎊的服務進行估算,那麼提供商可能會爲該價格範圍設置180英鎊 - 220英鎊的默認估計值,並且這是將顯示給用戶的內容。

我的問題是使它公平,我們使用laravel中的隨機函數從providers_table中隨機選擇5個提供程序以及它們的默認估計值,並從orderBy按降序顯示給用戶,並循環顯示結果風景。

$projectbids = ProjectBids::where('provider_id', '=', $proid) 
    ->where('category_id', '=', $catid) 
    ->orderBy('bid_price', 'desc') 
    ->get()->random(5); 

foreach($projectbids as $bid) 
{{ $bid->bid_price }} 
endforeach 

所以我試圖找到一種方法,將5個顯示估計插入到saved_estimates表,所以如果用戶刷新頁面或回來到頁面模型和視圖不會重新排序基於供應商的結果從隨機函數(5)被調用。

我知道這個問題:Create a Insert... Select statement in Laravel,但不能確定是否可以有更好或更簡單的方法來做到這一點,因爲我的問題奠定了從循環提供給視圖的5個結果表。

簡而言之:我希望能夠將5個動態結果直接存儲到帶有多個列的saved_estimations表中,例如project_id,provider_id,user_id,estimated_price,以便用戶可以在未來回到他們保存的估計中他們在變化。

非常感謝任何意見和建議,看看更有經驗的用戶會建議什麼會非常有幫助。

感謝

- 更新了個人的做法,看是否有改進的餘地,使其更laravel友好。

$results = $bidders; 
    foreach($results as $row){ 
     $project = $projectid; 
     $category = $row->category_id; 
     $provider = $row->service_providers_id; 
     $bidprice = $row->bid_price; 
     $propvalue = $row->property_value_id; 

     DB::table('static_bids')->insert(array(
      'project_id' => $project, 
      'category_id' => $category, 
      'service_providers_id' => $provider, 
      'bid_price' => $bidprice, 
      'property_value_id' => $propvalue 
     )); 
     } 

回答

2

所有你需要的是使用簡單的插入到表中,這樣的:

foreach ($projectbids as $bid) { $result = SavedEstimation::create(array( 'project_id' => $bid->project_id, 'provider_id'=> $bid->provider_id, 'user_id' => $bid->user_id, 'estimated_price' => $bid->estimated_price )); }

有沒有辦法通過反正只用一個查詢插入此。如果您希望這樣做的唯一原因是稍後向用戶顯示相同的HTML,則可以簡單地存儲輸出HTML,但這是不好的做法。

+0

有趣的你應該說!你幾乎只是想出了在過去一小時內工作的東西!這是我在注意到你回答了這個問題之前所做的事情。檢查我的問題,他們是不相同的! – Birdy

+0

你的例子沒問題。但如果你問如何讓Laravel更友好,我建議你刪除變量assigment塊。它看起來像$ a = $ b,這是冗餘代碼。另外,最好的做法是使用Eloquent而不是原始SQL,因爲很多原因。但是,您的更新示例仍然可以正常工作。 –

+0

我已經走了更多與您的答案只是稍微修改它的相關變量,因爲我可以看到你的意思與$ a = $ b,它無意義的分配變量兩次,當他們可以放在查詢和引用對象。另外,我改變了:: firstOrCreate的:: create方法,以幫助防止重複一點。 – Birdy