【问题标题】:how to join two tables in database Laravel如何连接数据库 Laravel 中的两个表
【发布时间】:2019-06-30 00:14:25
【问题描述】:

我正在尝试连接两个表(产品表和图像表),因此在产品表中每个产品都有多个图像(存储在名为图像的行中)所以我想在 images table 中显示每个产品的图像。在 images 表中,我在 products 表上有一个名为 product_idreferences(id) 的外键,问题是它无法将图像存储在 images 表中,(它一直将图像存储在 products 表的行(图像)中)。我该如何解决这个问题?

代码

产品.php

public function images()
 {
   return $this->hasMany('App\Image', 'product_id');
 }

图像.php

public function product()
{
  return $this->belongsTo('App\Product','product_id');
 }

控制器

 public function store(Request $request) 
 { 

$Input=$request->all();
$image=array();
if($files=$request->file('image')){
foreach($files as $file){
    $name=$file->getClientOriginalName();
    $file->move('images',$name);
    $image[]=$name;
  }
  } 
 product::create(array_merge($Input,
 [
 'image' => json_encode($image),

 ])); 
return redirect()->back(); 

}

如有任何帮助,将不胜感激。

【问题讨论】:

    标签: php mysql laravel laravel-5 eloquent


    【解决方案1】:

    如果您尝试将图像保存到图像表中,而您却是“它一直将图像存储在产品表中的行(图像)中” - 您保存了错误的项目。您似乎具有正确的结构 - 在您的模型中有一对多。只需要保存 Image 而不是 Product

    类似的东西可以解决这个问题:

    Image::create(['whateverYouNeedToSave', 
                  'product_id'=>$product_id,      <-- Connect the product here, within the image
                  'etc']);
    

    实际上可以通过创建 Product 然后将 Images 保存为关系来做到这一点,但这可能不是最简洁/最简单的架构方法- 建议您从保存图片开始,因为您将拥有许多图片,而不是一次只保存一个产品。然后,在这个工作,并且清晰/舒适之后,如果需要,您可以尝试更“高级”的方式。

    【讨论】:

    • 如果您已经创建了产品,请使用您想要附加图像的 ID。如果您不这样做并且这是一个新产品,请先创建产品,获取它的 ID,然后使用该新产品 ID 为附加到产品的图像制作所有图像。这不是最有效的,但它会帮助您排除故障/了解它是如何工作的。最终,您可以为新产品引入关系并attach() 图像。
    • 在我的表单中,我无法在不添加图像的情况下创建产品,因此产品表具有可填写的[价格、名称、图像等] @Watercayman
    • 如果每个产品可以有多个图像,我不确定为什么产品上会有一个图像字段。一对多将位于图像 (product_id) 而不是产品上。我认为您需要仔细检查您的数据库结构。
    • 为什么会出现这个错误"Undefined variable: product_id"
    • 您是否像我在第一条评论中所说的那样在创建(或使用旧产品)之后定义了$product_id
    猜你喜欢
    • 2019-08-11
    • 2021-07-09
    • 1970-01-01
    • 2021-04-02
    • 1970-01-01
    • 2014-05-14
    • 1970-01-01
    • 2017-09-03
    • 2021-03-21
    相关资源
    最近更新 更多