Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Laravel显示三个具有关系的表,其中一个表连接其他两个表_Laravel_Eloquent_Relationship - Fatal编程技术网

Laravel显示三个具有关系的表,其中一个表连接其他两个表

Laravel显示三个具有关系的表,其中一个表连接其他两个表,laravel,eloquent,relationship,Laravel,Eloquent,Relationship,我有三张桌子 Sizes - columns: (id, height, width) Media - columns: (id, media, description) Price - columns: (id, size_id, media_id, price) 每种尺寸,在介质表中都有每一条记录,但价格由每种尺寸和介质决定 我的目标是展示每种尺寸和媒体的价格,就像这样 8x10 - Media 1 - $20.00 8x10 - Media 2 - $24.00 8x10 - Me

我有三张桌子

 Sizes - columns: (id, height, width)
 Media - columns: (id, media, description)
 Price - columns: (id, size_id, media_id, price)
每种尺寸,在介质表中都有每一条记录,但价格由每种尺寸和介质决定

我的目标是展示每种尺寸和媒体的价格,就像这样

8x10 - Media 1 - $20.00
8x10 - Media 2 - $24.00
8x10 - Media 3 - $30.00
8x12 - Media 1 - $24.00
8x12 - Media 2 - $28.00
8x12 - Media 3 - $32.00
到目前为止,我尝试的是(尺寸模型):

没有关系,我可以这样做

$s = Size::all();
    foreach ($s as $size) {
        $m = Media::all();
        foreach ($m as $media) {
            $p = Price::where('enlarge_size_id', '=' , $size['id'])->where('enlarge_media_id', '=', $media['id'])->first();
            echo $size['height'] . 'x' . $size['width'] . ' -> ' . $media['media'] . ': $' . $p['price'] . '<br />';
        }
    }
$s=Size::all();
foreach($s作为$size){
$m=媒体::全部();
foreach(百万美元作为媒体){
$p=Price::where('magnize_size_id','=',$size['id'])->where('magnize_media_id','=',$media['id'])->first();
echo$size['height'].'x'.$size['width'.->'.$media['media'.]:$'.$p['price'.
; } }

这在拉威尔的关系中可能吗?我只是在寻找一种更干净的方法来查看、更新和添加。

在您的情况下,您应该使用多对多关系

首先定义与媒体表具有多对多关系的大小模型:

class Size extends Model
{
    public function media() {
      return $this->belongsToMany(Media::class ,'Price', 'size_id', 'media_id')->withPivot('price');
    }

}
然后定义与大小表关系相反的介质模型:

class Media extends Model
{
    public function sizes() {
       return $this->belongsToMany(Size::class ,'Price', 'media_id', 'size_id')->withPivot('price');
    }

}
如果要访问透视表中的价格列,可以在相关模型中使用透视道具,例如:

   $sizes=Size:with('media')->first();
    foreach ($sizes->media as $media){
       $price=$media->pivot->price
    }
   $sizes=Size:with('media')->first();
    foreach ($sizes->media as $media){
       $price=$media->pivot->price
    }