过滤2列以获得独特!组合的方法!用laravel / eloquent

时间:2016-09-23 10:29:59

标签: laravel eloquent

我想获得存在的color_code.code和manufacturer_bundle.name的所有独特组合。它们通过表制造商连接

这是我目前的代码。

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

问题,就是,select只返回那些字段,而不是实际的模型。所以我希望能够做到这一点:

$color_code->manufacturer->name

给了我

  

尝试获取非对象的属性

完整性:

的ColorCode:

 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();
    });

2 个答案:

答案 0 :(得分:0)

只有雄辩的对象才能拥有关系,而不是集合。

您的查询结果是集合,而不是Eloquent对象,因为您要组合两个表。所以当然你不能继承"数据组合的模型关系。您必须创建一个新模型,用于将颜色代码与制造商链接以使其工作,或者手动从指定数据集中找到ColorCode:

fplus::enumerate(fplus::transform(f, xs));

答案 1 :(得分:0)

我认为您可以使用hasManyThrough关系。 Laravel Has Many Through

ColorCode模型中添加以下方法以定义hasManyThrough关系。 注意:假设您有ManufacturerBundle表格manufacturer_bundleManufacturer manufacturer表格。

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

现在,在您的控制器中,您可以使用以下方法来检索manufacturer_bundle

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