Laravel无法获得正确且相关的结果

时间:2017-10-01 00:21:02

标签: laravel laravel-5.4 laravel-eloquent

我正在尝试为我的应用程序创建一个图像库,因此我可以从我的Laravel API请求图像。

图片根据应用中的位置分为不同类型,如“sidemenu”,“topbanner”等。

某些图片可以使用其他属性,例如“url”,“text”等。这些属性会因image-type而异。因此,“侧面菜单”类型的图像可能采用称为“字体颜色”的属性或类似的东西。

我的db-structure看起来像这样:

DB structure 因此,我们的想法是让所有具有image_type的图像具有像“sidemenu”这样的特定slug。然后,我想加入image_type_attributes上的所有image_type,最后加入他们的价值观。

我已将值和image_type_attributes拆分为自己的表格,因此我可以将这些属性用作模板,以便用户在上传图片时可以填写哪些属性。

这几乎可以工作,但是我的代码/关系出了问题,因为图像和image_value之间的关系被忽略了,所以我最终得到的值只是属于给定image_type的第一个实例。数据库 - 这应该是与图像相关的值。 (现在我在我的所有图像上输入第一张图像的值)

这些是我的模特:

图片

class Image extends Model
{
    protected $table = 'images';


    public function attributes(){
        return $this->type->attributes();       
    }

    public function type(){
        return $this->belongsTo(ImageType::class, 'image_type_id');
    }

}

将ImageType

class ImageType extends Model
{
    protected $table = 'image_type'; 


    public function images(){
        return $this->hasMany(Image::class);
    }

    public function account(){
        return $this->belongsTo(Account::class);
    }


    public function attributes(){
        return $this->hasMany(ImageTypeAttribute::class);
    }

}

ImageTypeAttribute

class ImageTypeAttribute extends Model
{
    protected $table = 'image_type_attribute'; 


    public function value(){
        return $this->hasOne(ImageValue::class, 'image_type_attribute_id');
    }

}

imageValue时

class ImageValue extends Model
{
    protected $table = 'image_value'; 

}

我的控制器:

// 1. Get all active images with some slug ex. "sidemenu" 
// and get the image-attributes and values as well

$images = Image::whereHas('type', function($query) use ($image_slug, $slug){
    $query->where('slug', $image_slug);
})
->with('attributes')
->where('active', 1)        
->get();

// 2. Loop through all images, and get the image attribute-names and values
$image_array = [];
foreach($images as $image){
    $image_array['image'] = $image->image;

    foreach($image->type->attributes as $attribute){
        $image_array[$attribute->name] = $attribute->value->value;
    }
}
return $image_array;

任何想法我做错了什么?

0 个答案:

没有答案