【问题标题】:How to insert one field of a table to another table in laravel 5?如何在 laravel 5 中将一个表的一个字段插入到另一个表中?
【发布时间】:2015-10-09 04:18:31
【问题描述】:

我想为素材创建图片库。所以在 Mysql 中我创建了两个表:

  • 表 1 multiples 包含字段名称(id、stuff_id、images),其中 id主键auto增量stuff_idindex

  • 表 2 stuffs 包含字段名称(stuff_id、名称、详细信息),其中 stuff_id主键auto增量。我只想上传一个包含 4 张图片的新东西,并且能够在 multiples 表中获取 stuff_id。

例如:如果我在 multiples 表中上传包含 4 张图片且 stuff_id =1 的新内容,应该如下所示::

|id||stuff_id||images|
|1|   |1|   |image1.jpg|
|2|   |1|   |image2.jpg|
|3|   |1|   |image3.jpg|
|4|   |1|   |image4.jpg|

这是我的代码,但它没有做我想要的(我有 2 个模型 Stuffs 和 Multiple)。它只是向表中插入记录,但是在表的倍数 stuff_id 中它得到 '0' 4 次。

public function upload_multiple(Request $request){

    $stuff = new Stuffs();
    $stuff->name = $request->input('name');
    $stuff->detail = $request->input('detail');
    $stuff->save();

    $files = $request->file('images');
    foreach ($files as $file){
    $multiple = new Multiple(); //Multiple is a 'Model' not a table name
    $destinationPath = 'uploads/';
    $filename = $file->getClientOriginalName(); 
    $upload_success = $file->move($destinationPath, $filename);
    $multiple->images =$destinationPath.$filename;
    $multiple->save();
} 

那么我该如何在 Laravel 5 中做到这一点? 非常感谢您的帮助!

【问题讨论】:

  • 这就是我寻求帮助的原因!

标签: mysql sql-server laravel insert


【解决方案1】:

您需要的是One to Many relationship。设置方法如下:

在您的模型类中,添加以下内容:

class Stuffs {
    ...
    // A Stuff has many Mutliples
    public function multiples() {
        return $this->hasMany('App\Multiple');
    }

}

class Multiple {
    ...
    // A Multiple belongs to only one Stuff
    public function stuff() {
        return $this->belongsTo('App\Stuffs');
    }
}

然后,在添加 Stuff 时,您可以简单地 attach Multiples to it:

public function upload_multiple(Request $request) {
    $stuff = new Stuffs();
    $stuff->name = $request->input('name');
    $stuff->detail = $request->input('detail');
    $stuff->save();

    $files = $request->file('images');

    $multiples = [];

    foreach ($files as $file) {
        $multiple = new Multiple(); //Multiple is a 'Model' not a table name
        ...

        $multiples[] = $multiple;
    }

    $stuff->multiples()->saveMany($multiples);
} 

【讨论】:

  • 我得到了这个错误:: 方法名必须是一个字符串@John Bupit
  • 我不明白 $multiples = [];和 $multiples[] = $multiple;我应该设置一些价值吗
  • $multiples = [] 等价于$multiples = array(),即定义一个新数组。 $multiples[] = $multiple 表示您将 $multiple 推送到 $multiples 数组 as explained in the documentation
  • 是否需要将这两行代码添加到我的代码中?
  • 是的。 $stuff->multiples()-saveMany($multiples) 表示您将Multiple 对象数组附加到$stuff。我添加的那 2 行,创建 $multiples 数组。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-17
  • 1970-01-01
  • 2021-05-14
  • 2019-01-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多