代码之家  ›  专栏  ›  技术社区  ›  GluePear

雄辩的关系混乱

  •  0
  • GluePear  · 技术社区  · 6 年前

    Foo ,它有三个字段, id , title ,和 image_id 图像id 引用 身份证件 在一个 images 桌子。

    我有这样的关系:

    public function image()
    {
        return $this->hasOne('App\Image');
    }
    

    图片.php:

    public function foos()
    {
        return $this->belongsToMany('App\Foo');
    }
    

    我想我可以用这个得到一个Foo的图像:

    $foo = Foo::find(1);
    $image = $foo->image;
    

    “where子句”(SQL:select*from)中的未知列“images.foo_id” 图像 哪里 图像 . foo_id =1和 . 食品标识

    4 回复  |  直到 6 年前
        1
  •  4
  •   Devon Bessemer    6 年前

    你俩的关系都错了。这种关系是一对多的。在Foo中定义了一对一,在Image中定义了多对多。

    1. 图像可能有很多foo,所以这将是一种hasMany关系。
        2
  •  2
  •   Kenny Horna    6 年前

    你们的关系没有建立好。

    Foo 有一个 Image 图像 可用于一个或多个 所以:

    Image 1 ---- m Foo
    
    // or if the image is unique for every Foo object
    Image 1 ---- 1 Foo
    

    Foo.php语言

    public function image()
    {
        return $this->belongsTo('App\Image');
    }
    

    public function foos()
    {
        return $this->hasMany('App\Foo');
    
        // or if its unique:
        // return $this->hasOne('App\Foo');
    }
    
        3
  •  0
  •   Erubiel    6 年前

    是 啊。。。这个 hasOne 关系就是这样。。。寻找 foo_id 关于你的 image

    你应该用 belongsTo Foo 哈松 hasMany 在图像上。。。

    或者重新声明迁移表。。。另一条路

    一个模特, ,两个字段, id , title . 以及 食品标识 形象 表引用 foo 桌子。

        4
  •  0
  •   Akbar Soft    6 年前

    图像模型应该有“foo_id”和“Image_path”列。

    并从Foo模型中删除“image\u id”列。

    在Foocontroller的create函数内部。。。

    $foo = new Foo();
    $foo->title = $request->title;
    $foo->save();
    
    $pathToImage = Storage::put('images/',$request-        >file('image'));
    $image = new Image();
    $image->image_path = $pathToImage;
    $image->foo_id  = $foo->id;
    $image->save();
    

    在Foo模型内部。。。

    public function image()
    {
        return $this->hasOne('App\Image');
    }
    

    图像模型内部。。。

    public function foo()
    {
        return $this->belongsTo('App\Foo');
    }
    

    从数据库中获取foo项

    $foos = Foo::all();
    foreach ($foos as $foo){
           echo  $foo->title;
           echo  $foo->image->image_path;
    }