Laravel 4系列仅返回第一排

时间:2013-11-18 12:30:33

标签: laravel laravel-4 eloquent

我有很多关系,我正在尝试的是根据某个广告ID获取数据透视表中的所有行。

我的表格:

广告表

enter image description here

图片表

enter image description here

advertisements_images

enter image description here

我的模特:

Image.php

class Image extends Eloquent
{

protected $table = "images";

/**
 * 
 * @return type
 */
public function advertisements()
{
    return $this->belongsToMany('Image', 'advertisements_images', 'img_id', 'adv_id')->withTimestamps();
}

public function setNameAttribute($value)
{
    $this->attributes['name'] = $value . date('YmdHis');
}

}

Advertisement.php

class Advertisement extends Eloquent
{

protected $table = "advertisements";
public static $sluggable = array(
    'build_from' => 'title',
    'save_to' => 'alias'
);

public function images()
{
    return $this->belongsToMany('Advertisement', 'advertisements_images', 'adv_id', 'img_id')->withTimestamps();
}

public function categories()
{
    return $this->belongsToMany('Advertisement', 'advertisements_categories', 'adv_id', 'cat_id')->withTimestamps();
}

控制器内的方法

private function selectMainImage($id)
{
    $images = \Advertisement::find($id)->images;
    $temp = array(array());
    $i = 0;
    foreach ($images as $image) {
        $temp[$i]['id'] = $image->id;
        $temp[$i]['name'] = $image->name;
        $temp[$i]['url'] = \MyThumbnails::get($image->id, "125x125");
        $i++;
    }
    $data = array(
        'title' => 'Odaberite glavnu sliku',
        'id' => $id,
        'images' => $temp
    );
    $this->generateView('layout.backend.advertisement.main-image', $data);
}

此方法应返回包含所有6个图像的视图,而不是仅返回第一个图像。 当我对集合执行var_dump()时,我得到的只返回第一行:http://paste.laravel.com/18up 如果我在数据库中创建重复的广告,该集合将返回第一行和第二行。如果我再次执行此操作将返回行+ 1,直到显示所有图像。

重复示例:

enter image description here

enter image description here

http://paste.laravel.com/18uy

1 个答案:

答案 0 :(得分:2)

你的关系错了。

class Advertisement extends Eloquent{
...
    public function images(){
        return $this->belongsToMany('Image', 'advertisements_images', 'adv_id', 'img_id')->withTimestamps();
    }
...
}

class Image extends Eloquent{
...
public function advertisements(){
    return $this->belongsToMany('Advertisement', 'advertisements_images', 'img_id', 'adv_id')->withTimestamps();
}

你写的错误是他们所属的模型:Image->belongsToMany('Advertisement')Advertisement->belongsToMany('Image')。试着看看这是否足以解决它...其余对我来说似乎很好