我需要帮助Laravel雄辩的模型关系。我有三个表:
项目
item_id
slideshowID
幻灯片
slideshow_id
图片
image_id
slideshowID
我花了一整天努力让它发挥作用,我只是不能。 我想要的是,每个项目都有自己的图像幻灯片。
项目模型
public function images(){
return $this->hasManyThrough(
'App\image','App\slideshow','slideshow_id','slideshowID','slideshowID'
);}
控制器
$items=item::with('images')->get();
return \View::make('home')->with('items', $items);
查看
@foreach($items as $item)
<div class='item' data-categoryid='{{$item->categoryID}}'>
<div class='item-image'>
@foreach($item->images as $image)
<img src='{{URL::asset($image->path)}}' data-image-id='{{$image->image_id}}' style='display:none'>
@endforeach
</div>
<div class='item-name'>{{$item->name}}</div>
<div class='item-price'>Od {{$item->price}}€</div>
<button class='btn-blue'>Več...</button>
</div>
@endforeach
查询
select `images`.*, `slideshows`.`slideshow_id` from `images` inner join `slideshows` on `slideshows`.`slideshow_id` = `images`.`slideshowID` where `slideshows`.`slideshow_id` in (?, ?, ?, ?, ?, ?, ?)" array(7) { [0]=> int(1) [1]=> int(7) [2]=> int(2) [3]=> int(6) [4]=> int(3) [5]=> int(4) [6]=> int(5) }
输出 - 空图像数组
{"items_id":1,"code":"999","name":"koledar","description":"","slideshowID":1,"stock":999,"price":5.5,"categoryID":2,"images":[]}
修改 我设法得到了一些图像,但它们是错误的。
Item: 3
Slideshow fk:2
Slideshow id:3
9 images/bon2.jpg
Slideshow id:3
10 images/bon.jpg
它总是让幻灯片显示等于项目的ID。我曾尝试添加商品模型 protected $ foreignKey =&#39; slideshowID&#39; ,但不会更改商品
答案 0 :(得分:0)
您非常接近,只需稍微更改一下 slideshows
模型,您需要在那里添加主键
protected $primaryKey = 'slideshow_id';//https://github.com/laravel/framework/blob/5.3/src/Illuminate/Database/Eloquent/Model.php#L56
这是必需的,因为当您致电 hasManyThrough
时,请参阅此处https://github.com/laravel/framework/blob/5.3/src/Illuminate/Database/Eloquent/Model.php#L875-L886正在呼叫
答案 1 :(得分:0)
我解决了。我把数据库表设置错了。相反,如果有这样的表:
<强>项
item_id
slideshowID
<强>幻灯片强>
slideshow_id
图像
image_id
slideshowID
我将它们改为
<强>项
item_id
<强>幻灯片强>
slideshow_id
item_id
图像
image_id
slideshowID