我有很多关系,我正在尝试的是根据某个广告ID获取数据透视表中的所有行。
我的表格:
广告表
图片表
advertisements_images
我的模特:
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,直到显示所有图像。
重复示例:
答案 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')
。试着看看这是否足以解决它...其余对我来说似乎很好