2017-08-13 23 views
0

我有3種型號如何存儲在孩子的關係以便現場訂購父

Content (1) 
    ContentBlocks (many blocks belong to Content) 
    ContentBlockSettings (many settings belong to ContentBlock) 

這種關係,我需要從數據庫,並命令他們ContentBlocks,我有一個字段名爲秩序及其存儲在每個塊的ContentBlockSettings。

如何從數據庫獲取ContentBlocks,並讓它們按照存儲在子關係中的訂單字段進行排序。

請不要告訴我將訂單字段上移到ContentBlocks,我知道這將是最簡單的方法,但有一個非常具體的原因,我不能在我的應用程序中執行此操作。

所以,你可以讓我知道是否有可能通過存儲在子關係中的'order'字段來訂購ContentBlocks。如果可能,你能告訴我該怎麼做嗎?

更新:

foreach ($content->blocks as $key => $block) { 
      $title = $block->settings; 
      foreach ($block->settings as $key => $setting) { 
       // dump('we here: ' . $setting['key']); 
       if($setting['key'] == 'order') { 
        $block->order = (int)$setting['value']; 
        break; 
       } 
      } 
    } 


$content->blocks = $content->blocks->sortBy('order'); 

    return response()->json([ 
     'status' => 'success', 
     'blocks' => $content->blocks 
    ], 201); 

如果我註釋掉// $內容 - >塊= $內容 - > blocks-> sortBy( '​​順序');

什麼是返回到客戶端是:

enter image description here

如果該行被再次啓用什麼是返回是這樣的: enter image description here

注意區別?在第一圖像塊是陣列,有[在乞求如果仔細觀察,並在第二屏幕沒有[,有長:3在第一和第二屏幕沒有長度

也: enter image description here 作爲你可以在上面看到,imageblock是3,訂單頭塊是2

甚至認爲它們是在服務器上排序的,sortBy('order')沒有改變數組鍵,所以當我dd($ content->在服務器塊),確保我得到

0 => TitleBlock 
2 => HeaderBlock 
1 => ImageBlock 

這就是被打印時DD(),因爲你可以SE e ImageBlock仍然是1,HeaderBlock在數組中仍然是2。

我該如何解決這個問題,以便客戶得到正確的訂單?

回答

0

可以使用sortBy收集方法

$collection = collect([ 
    ["id"=>1,"product"=>['name' => 'Desk', 'price' => 200]], 
    ["id"=>2, "product"=>['name' => 'Chair', 'price' => 100]], 
    ["id"=>3, "product"=>['name' => 'Bookcase', 'price' => 150]], 
    ]); 

$sorted = $collection->sortBy("product.price")->toArray(); 

return: [ 
    ["id"=>2, "product"=>['name' => 'Chair', 'price' => 100]], 
    ["id"=>3, "product"=>['name' => 'Bookcase', 'price' => 150]], 
    ["id"=>1,"product"=>['name' => 'Desk', 'price' => 200]], 
] 
+0

謝謝,我更新了我的問題。我已經想通了,我需要根據收集進行排序,但是我仍然在客戶端遇到了問題,請參閱我的更新問題以獲取詳細信息 –

+0

僅適用於瀏覽器。唯一的問題是如果發送給客戶端ID在3,2,1中,無論如何它都會在1,2,3中渲染它們,因爲它忽略了你以何種方式發送它 –

+0

是這項工作'$ content-> blocks-> sortBy('settings.order')'? 如果服務器上的數據是正確排序的,那麼我認爲問題出現在前端(如何呈現它)。 – bhill77