2015-10-26 37 views
1

我的模型產品的回報是這樣從relationed表下拉創建列表與價值

  • ID = 1
  • 名=產品名稱
  • CATEGORY_ID = 101
  • 類別=陣列
    • id = 101
    • name = electronics

,我需要使用lists()創造這樣的事情:

列表( 「category.name」, 「ID」)

但看起來,這是不可能。如何爲這樣的下拉列表創建:

1 = electronics 
2 = furniture 
3 = cars 
... 

非常感謝

+0

是「類別」屬於「產品」的模型添加timestamps()?如果是這樣,你是想列出所有類別,還是僅僅列出一部分類別? – DonnaJo

+0

產品所屬類別和類別hasMany產品。我試圖列出產品ID與類別名稱屬於每個產品。 – scooti

回答

1

你確定你沒有樹立正確的關係?因爲這正是lists()通常所做的事情,並且創建這樣的列表根本不可能。
很難理解你如何設計你的雄辯邏輯而沒有你的代碼,但這裏是我如何處理你的情況,假設你已經設置了category_product數據透視表。
鑑於兩款車型,ProductCategory,我會定義這些2間的關係的原因,據我可以得到的,一個產品可以有幾個類別和類別可與多種產品相關聯:

class Product extends Model 
{ 
    //////// 
    public function categories() 
    { 
     return $this->belongsToMany('App\Category'); 
    } 
    //////// 
} 

class Category extends Model 
    { 
     //////// 
     public function products() 
     { 
      return $this->belongsToMany('App\Product'); 
     } 
     //////// 
    } 

在這一點上,你是好去,所有你必須爲了得到你的名單做的是

Product::findOrFail($id)->categories->lists('name','id') 

這將返回數組保存與特定產品關聯

array:[ 
    1 => first-category 
    2 => second-category 
    3 => third-category 
    .... 
    ] 

注意所有類別與此設立它會工作的其他方式爲好,如果你想獲得的所有列表匹配一個給定類別

Category::findOrFail($id)->products->lists('name','id') 

,在我以爲你是建立一個數據透視表,但是,如果你沒有答案的最頂級產品,這裏有一個快速提示:您的產品中 遷移

public function up() 
    { 
     Schema::create('products', function (Blueprint $table) { 
      // 
     }); 

     Schema::create('category_product', function (Blueprint $table){ 
      $table->integer('category_id')->unsigned()->index(); 
      $table->foreign('category_id')->references('id')->on('categories')->onDelete('cascade'); 

      $table->integer('product_id')->unsigned()->index(); 
      $table->foreign('product_id')->references('id')->on('products')->onDelete('cascade'); 

      $table->timestamps(); 
     }); 
    } 

Then migrate現在一切正常。最後但並非最不重要的一點是,如果您要使用此遷移,您需要修復模型中的關係,這取決於您的應用程序邏輯:讓我們說流程是創建一個新產品 - >選擇內部的類別創作形式,則需要在大類方法

return $this->belongsToMany('App\Category')->withTimeStamps();