2017-08-13 13 views
0

モデル内に関数を作成します。 変数$category=1,2,3;はあなたが行うことができます何をしたいのか、私はその関数がテーブルカテゴリで探すようにとだけ$categoryName=first,second,thirdLaravelのforeach内でデータをマージする

public function getCategory($category){ 
    $names = explode(",",$category); 

    foreach ($names as $name){ 
     $categories = DB::table('categories')->where('id',$name)->first(); 
     $categoryName = implode(',',(array)$categories->name); 
    } 
    return $this->$categoryName; 
} 

答えて

1

ようになり一つの変数に私は、このIDの名前を返すようにしたい文字列

です次のように。

public function getCategory($categoryIds) // ex) 1,2,3 
{ 

    $categoryIdArray = explode(",", $categoryIds); // [1,2,3] 
    $categoryName = ''; 
    foreach ($categoryIdArray as $categoryId){ 
     $category = DB::table('categories')->where('id',$categoryId)->first(); 
     $categoryName .= $category->name . ','; 
    } 
    $categoryName = substr($categoryName, 0, -1); 
    return $categoryName; 
} 

しかし、上記の例では、Modelの利点を利用していません。

getCategoryメソッドを持つModelcategory_ids属性を持っていますか?

そうであれば、次のように書くことができます。

public function getCategory() 
{ 

    $categoryIdArray = explode(",", $this->category_ids); 
    $categoryName = ''; 
    foreach ($categoryIdArray as $categoryId){ 
     $category = DB::table('categories')->where('id',$categoryId)->first(); 
     $categoryName .= $category->name . ','; 
    } 
    $categoryName = substr($categoryName, 0, -1); 
    return $categoryName; 
} 

あなたはそれがargumentを必要としないので、$this経由でインスタンスの1,2,3値を持つcategory_idsにアクセスすることができます。

さらに効果的に行うには、category_id属性を別のモデルに含めることができます。

この場合、上記をより簡単に行うことができます。

参考: https://laravel.com/docs/5.4/eloquent-relationships#many-to-many

+0

あなたは私の問題を解決します...ありがとうございました... –

+0

よろしくお願いします!問題が解決してうれしいです。 – Yujiro

0

あなたのIDをループする必要はありませんし、複数のDBクエリを実行します - あなたは使用してちょうど1つのクエリでそれらのすべてを取得することができ、ドキュメント内whereIn

public function getCategory($category) { 
    $ids = explode(",",$category); 
    $categories = DB::table('categories')->whereIn('id',$ids)->get(); 
    return $categories->implode('name', ','); 
} 

もっとinfo about whereIn

それは、この使用して雄弁を行うには滑らかな印象になりますが、Laravelの方法は、例えば(これはあなたがカテゴリテーブルに一致するようにCategoryモデルを持っていると仮定し):ドキュメント内

public function getCategory($category) { 
    $ids = explode(",",$category); 
    $categories = App\Category::find($ids); 
    return $categories->implode('name', ','); 
} 

もっとinfo about retrieving models

+0

おっとあなたは文字列が返されることを望んでいることに気付きました。私の初期コードがコレクションを返しました。文字列を返すように答えを更新しました。 –

関連する問題