Laravel外键带有img路径

时间:2016-05-11 14:16:15

标签: php laravel foreign-keys laravel-5.1

我基本上有这个:

   foreach ($request->input('images', []) as $imagesData) {
       $images = new ScenesImages($imagesData);
       $images->product()->associate($product);
       $images->save();
   }

这样可以在我的外键中正确保存图像的名称,但如何动态保护图像路径。

如果我dd($ product);

我明白了:

>   #attributes: array:2 [▼
>     "name" => "test"
>     "product_id" => 7   ]

但没有img(路径)

在循环中创建html的Javascript:

    for(var i = 1; i<slider.value; i++) {
        $('#sliderAppendSz').append(
        '<div class=\"form-group\">'
            +'<div class=\"fileinput fileinput-new\" data-provides=\"fileinput\">'
            +'<div class=\"input-group\">'
            +'<input name=\"images['+i+'][name]\" type=\"text\">'
                +'<span class=\"input-group-btn\">'
                    +'<span class=\"btn btn-primary btn-file\">'
                        +'<input name=\"images['+i+'][scenes_images]\" type=\"file\" multiple class=\"ImageInput\" accept=\"file_extension/*\">'
                    +'</span>'
                +'</span>'
            +'</div>'
        +'</div>');
    }

我的场景模特:

<?php

    namespace App;

    use Illuminate\Database\Eloquent\Model;

    class ScenesImages extends Model
    {

        protected $table = 'scenes_images';

        protected $fillable = ['product_id', 'name', 'scenes_images'];

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


    }

这是我的产品型号:

<?php

    namespace App;

    use Illuminate\Database\Eloquent\Model;

    class Product extends Model
    {

        public static $projects        = 'C:\\xampp\\htdocs\\MyProject\\Web';

        protected $table = 'products';

        protected $fillable = [
            'scenes_images'
        ];

        public static $rules = [
            'scenes_images'                     => 'max:500',                   
        ];

        public function scenesImages()
        {
            return $this->hasMany('App\ScenesImages');
        }

    }

编辑:

好吧我想我得到了它我必须添加这个,因为我只是在我添加一个foreach文件之前得到了输入,我现在的问题是,如果以某种方式可以将两个foreach循环加到一个像$ request - &gt;文件和输入。

  foreach ($request->file('images', []) as $imagesData) {
       $images = new ScenesImages($imagesData);
       $images->product()->associate($product);
       $images->save();
   }

3 个答案:

答案 0 :(得分:0)

如果您向我们展示有关模型ScenesImages的更多信息可能会更好,否则您可能会有这样的事情。

foreach ($request->input('images', []) as $imagesData) {
       $images = new ScenesImages($imagesData);
       $images->product()->associate($product);
       $images->path = $your_path

       $images->save();
   }

当然,您需要变量$your_path以及保存图像的路径,或者它是否是来自Amazon S3的网址,但正如我所说,我们需要有关您的模型结构的更多信息。

答案 1 :(得分:0)

不要忘记上传图片,将其保存到服务器

foreach ($request->input('images', []) as $imagesData)
{
    $images = new ScenesImages($imagesData);
    $images->product()->associate($product);

    $destinationPath = 'uploads'; // upload path
    $extension = $imagesData->getClientOriginalExtension(); // getting image extension
    $fileName = $imagesData->getClientOriginalName()'.'.$extension; // renameing image
    $imagesData->move($destinationPath, $fileName); // uploading file to given path

    $images->path = $destinationPath.'/'.$fileName;

    $images->save();
}

答案 2 :(得分:0)

我在您的代码中遇到的一些问题:

  1. 我对$request->file('images')返回的内容感到有些困惑。如果它是UploadedFile对象的数组,那么我很确定你做错了。在上传了保存ScenesImages模型时要使用的文件路径后,您甚至无法将图像上传到服务器。

  2. 您的代码在这里:

  3. $images = new ScenesImages($imagesData);

    正在新建一个ScenesImages对象并向其传递一个变量,该变量需要满足模型正确创建的必需属性,其属性为:name,{{1}根据你的问题代码。如果你不能正常工作。你应该传递一个关联数组,其中的键与模型所具有的属性相匹配。

    1. 您通常应该将表格复数为scenes_images,然后将您的模型设为单数:scene_images
    2. 考虑像这样做你的代码:

      SceneImage