2016-09-23 14 views
-1

存在するcolor_code.codeとmanufacturer_bundle.nameの一意の組み合わせをすべて取得したいと思います。それらはテーブルメーカーを通じて接続されていますユニークな組み合わせの2つの列をフィルタリングする方法! laravel/eloquentと

これは私の現在のコードです。

$color_codes = ColorCode::select(['color_code.code', 'manufacturer_bundle.name'])->distinct() 
    ->leftJoin('manufacturer_bundle', 'color_code.manufacturer_id' , '=' , 'manufacturer_bundle.id') 
->get(); 

それに問題は、選択リターンがフィールドのみではなく、実際のモデルということ、です。

カラーコード:

$color_code->manufacturer->name 

完全を期すために非オブジェクト

のプロパティを取得しようとすると

私に与える:だから私はこれを行うことができるようにしたいです

Schema::create('color_code', function (Blueprint $table) { 
     $table->increments('id'); 
     $table->string('code'); 
     $table->index('code'); 
     $table->integer('manufacturer_id'); 
     $table->index('manufacturer_id'); 
     $table->timestamps(); 
    }); 

メーカー

Schema::create('manufacturer', function (Blueprint $table) { 
     $table->bigIncrements('id'); 
     $table->string('name'); 
     $table->index('name'); 
     $table->integer('manufacturer_bundle_id')->nullable(); 
     $table->index( 'manufacturer_bundle_id'); 
     $table->timestamps(); 
    }); 
+0

離れて、この効果がない、それは動作しないだろうからhttp://stackoverflow.com/questions/11277251/selecting-distinct-2-columns-combination-in-mysql – Toskan

答えて

0

雄弁なオブジェクトだけが、コレクションではなくリレーションシップを持つことができます。

2つのテーブルを結合しているため、クエリの結果はコレクションであり、Eloquentオブジェクトではありません。もちろん、データの組み合わせについては、モデル関係を "継承"することはできません。あなたは仕事にそのためメーカーとカラーコードをリンクするための新しいモデルを作成するか、または手動で指定されたデータセットからカラーコードを見つける必要があります:

$color_codes = ColorCode::select(['color_code.code', 'manufacturer_bundle.name'])->distinct() 
    ->leftJoin('manufacturer_bundle', 'color_code.manufacturer_id' , '=' , 'manufacturer_bundle.id') 
->get(); 

foreach ($color_codes as $color_data) { 
    $color_code = ColorCode::where('code', color_data->code)->first(); 
    echo $color_code->manufacturer->name; 
} 
+0

こちらをご覧ください。ユニークなコンビネーションの制約が完全に満たされていないので、 – Toskan

0

私はあなたがhasManyThrough関係を使用することができると思います。 Laravel Has Many Through

ColorCodeモデルでは、次のメソッドを追加して、hasManyThrough関係を定義します。 :テーブルmanufacturer_bundleManufacturermanufacturerテーブルのモデルはManufacturerBundleと仮定します。

public function manufacturer_bundle(){ 
    return $this->hasManyThrough(ManufacturerBundle::class,Manufacturer::class); 
} 

コントローラでは、次の方法を使用してmanufacturer_bundleを取得できます。

$color_codes = ColorCode::with('manufacturer_bundle')->get(); 
+0

結果が異なる必要はありますか?それはユニークな組み合わせである必要があります – Toskan

+0

@Toskan jsu add distinct() 'メソッド – jaysingkar

関連する問題