在Laravel 5.4中检索特定类别的产品

时间:2017-09-15 10:54:51

标签: php laravel-5.4 relationship

我有一个Laravel项目,我创建了两个表(产品和类别),并通过一对多的关系将它们相互关联。 One Category有很多产品。我创建了一个名为ProductsController的CRUD控制器,并将图像存储在Laravel应用程序中的公共文件夹中。

当我尝试检索特定类别的存储图像并在视图中显示时,问题就开始了。 请协助。

类别模型

class Category extends Model
{
    protected $fillable = ['name'];

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

}

产品型号

class Product extends Model
{
    protected $fillable = ['name', 'desctiption' , 'size', 'category_id'];

    public function category()
    {
        return $this->belongsTo(Category::class);
    }


}

的ProductsController

 public function store(Request $request)
    {

        $formInput=$request->except('image');

       //validation
        $this->validate($request,[
            'name'=>'required',
            'size'=>'required',
            'description' => 'required|min:12',
            'price'=>'required',
            'category_id' => 'required',
            'image'=>'image|mimes:png,jpg,jpeg,gif|max:100'
        ]);

        //Instantiate a new Project called Product
        $product = new Product;

        //Add the products to the Object
        $product->description = $request->description;
        $product->name = $request->name;
        $product->price = $request->price;
        $product->category_id = $request->category_id;
        $product->size = $request->size;

        //Save all the items to the database
        $product->save();


        //image upload and save in folder in our app
        $image=$request->image;
        if($image){
            $imageName=$image->getClientOriginalName();
            $image->move('images',$imageName);
            $formInput['image']=$imageName;
        }

        Session::flash('message' , $request->name . '  has been successfully added');

        Product::create($formInput);
        return redirect()->route('product.create');
    }


     public function show($id)
        {

            $items = Category::find(6)->products()->where('images' , true)->get();

            return view('front.index', compact('items'));
        }

Front.index视图

@foreach($items as $item)
        <img src="{{ url('images', $item->image) }}">
@endforeach

3 个答案:

答案 0 :(得分:1)

在本地文件夹中的图像

$imageNames = time().'.'.$request->image->getClientOriginalExtension();
   $request->image->move(public_path('uploads'), $imageNames);

第一次更改; Product :: create($ formInput); to

$oroduct=new Product;
$product->image= $imageName;

和@foreach($ items as $ item)         image)}}&#34;&gt; @endforeach to

<img src="{{ URL::to('/uploads/'.$items->image) }}"/>

上传是本地文件夹,你保存图像..在你的情况下可能是不同的

答案 1 :(得分:0)

首先检查/public/images文件夹下的图像是否可用 如果是这样,请尝试以这种方式访问​​它们:

<img src="{{ asset('images/'.$item->image) }}">

注意:

如果图像没有保留在数据库中,那是因为你正在使用Product :: create而不是在$ fillable数组中包含图像,所以它不能被大量分配!

注2:

您可以将图像上传到公共文件夹,以便使用我创建的此功能从公共目录访问它们,您可以在验证后使用2个参数 调用它(来自请求的图像文件)以及从公共文件夹到保存位置的相对路径 ,它将返回您可以在数据库中保留的文件名:

public function upload_image($request['image'], $folder='images'){
  $filename = time().'.'.$image->getClientOriginalExtension();
  $image->move(public_path($folder), $filename);
  return $filename;
}

希望有所帮助:)

答案 2 :(得分:0)

尝试改为

Product::create($formInput);

类似

$product->image = $imageName; 
$product->save();